このアプローチはいくつかの理由悪い考えですが、最初にここにいくつかの問題があります:
int temp[0];
は、これは私がスタック要素に許可されていても思いません0アイテム、の配列です。このような配列を宣言する場合は、使用する値の最大値を指定する必要があります。 int temp[10];
これは非常に重要です! - 数字を少なく(例えば[10]と[11]を使用すると)指定すると、最高でクラッシュし、最悪の場合、悪夢である不思議なバグが追跡されるメモリ上書きが発生します。
次の問題は、この行です:この行がないこと
while (*temp + i != '\0')
「TEMP」で指定されたアドレスの値が格納を取ると私を追加しています。何がしたいことはそうのように、温度によって指定されたアドレスのn番目の要素に値を取得することです:
while (*(temp + i) != '\0')
だから、何が間違っているのですが、あなたはこれを行うには良い方法を考えるために5分を取る必要があります。
私はそれが悪いアイデアだ言及した理由は以下のとおりです。
- あなたは(この場合は0)で終端素子を保存することはできませんあなたがその長さ
- を必要とし、アレイ全体のいつを反復する必要がで配列
代わりに、配列の要素数を格納する別の値を維持することをお勧めします。これを行う最も一般的な方法は、この概念(要素のブロックと現在のサイズ)をラップするクラスを作成することです。
C++標準ライブラリには、この目的で使用できる "vector"という名前のテンプレートクラスが付属しています。配列と全く同じではありません(索引付けする前に項目を追加する必要があります)が、非常に似ています。また、便利なコピー/リサイズのサポートも提供しています。
ここにstd :: vectorを使用するように書かれたプログラムがあります。代わりに、「長さ」関数の私は値をプリントアウトするために何かを追加しました:
#include <vector>
#include <iostream>
void print(std::vector<int> const& vec)
{
using namespace std;
for (size_t i = 0; i < vec.size(); i++)
{
cout << vec[i] << " ";
}
cout << endl;
}
int main()
{
std::vector<int> temp;
temp.push_back(7);
temp.push_back(10);
print(temp);
return 0;
}
を。長さ0の配列を持つことはできません。どのコンパイラを使用していますか? –