2016-10-25 12 views
0

私は、char配列C++動的配列

const int nameLength = 10; 
int dataCount = 5; 

// Initialize array of char array 
char ** name; 
name = new char*[dataCount]; 
for (int i = 0; i < dataCount; i++) 
    name[i] = new char[nameLength]; 

// Prompt for names 
for (int i = 0; i < dataCount; i++) { 
    char userInput[nameLength]; 
    cout << "Input data " << i << " :"; 
    cin >> userInput; 
    name[i] = userInput; 
} 
cout << endl; 

// Display data entered 
for (int i = 0; i < dataCount; i++) { 
    cout << "Name" << i << " : " << name[i] << endl; 
} 

の動的配列を作成しようとしていますが、出力は間違っている:

Input data 0 :abcde 
Input data 1 :fghij 
Input data 2 :klmno 
Input data 3 :pqrst 
Input data 4 :uvwxy 

Name0 : uvwxy 
Name1 : uvwxy 
Name2 : uvwxy 
Name3 : uvwxy 
Name4 : uvwxy 

私はこれに入力部分を変更した場合、それは希望期待通りの仕事:

cin >> name[i]; 

しかし、私の場合、私は直接そのような変数にデータを入力することはできません。
コードに何が間違っているか説明できる人はいますか?私はどこでも検索しましたが、助けてくれないようです

+1

その後、 'strcpy'を使用してください。またはより良いまだ 'std :: vector '。最後のコードスニペットを使用できないのはなぜですか? – DeiDei

+3

Cスタイルの文字配列よりも 'std :: string'を使用することを推奨します。動的に割り当てられる配列ではなく、 'std :: vector'を使用することを推奨します。 –

+0

実際にはchar配列はクラスにあり、char配列を入力する関数が必要です – wthe22

答えて

1

あなたは文字列ではなくポインタをコピーしています。実際には、あなたのname[i]はすべてuserInputと等しくなり、両方ともポインタであることに注意してください。完全な文字列をコピーする場合は、たとえばstrcpyを使用してください。

ポインタをコピーしているので、それらのポインタはすべて同じ文字列を指していて、最後に入力したものを表示します。

+0

STLなしでコピーする方法はありますか? – wthe22

+0

好きな場合は、手作業でコピーを行うことができます。 for(int j = 0; j grigor

+0

ところで、strcpyは必ずしもSTLにあるわけではなく、単なるC関数です。 – grigor