2012-03-13 14 views
0

最近、私はCでコードをやっているとき、私は次のように2次元配列を宣言必要があります。二次元のChar配列

char foo[20][20]; 

後、私はfooにして文字配列を割り当てます。

その後、これらの文字列を他の変数にコピーする必要があります。

コピーはこのように書きます:foo[0]foo[1]foo[6]foo[2]のようにコピーしている間、私は順序を維持していなかったので

strcpy(date, foo[0]); 
strcpy(name, foo[1]); 
strcpy(des, foo[6]); 
strcpy(cpy, foo[2]); 

、私は元の文字列と一緒にp3にいくつかのゴミを得ました。
後で、コピー時にfoo[0]foo[1]foo[2]foo[6]にシーケンスを修正しました。期待した結果が得られました。

これを明確にしてください。

実際、ポインタp1、p2、p3およびp4は構造内の変数です。 構造は同類を行く:

struct sample 
{ 
    char date[9]; 
    char name[8]; 
    char des[8]; 
    char cpy[9]; 
}; 
+4

これらの 'p'文字列にはスペースが割り当てられていますか?あなたの例では法的な構文ではないので、実際のコードではないことは明らかです。 –

+1

完全なコードを投稿できる方が良いでしょう。 – Jay

+1

実際のコードを投稿し、fooがどのように初期化されるかを示します。 –

答えて

0

オプション1はあなたが構築初期化するか、にmemsetを(呼び出して0にあなたの配列、最初のチェック)を正しく両方で、使用はsizeof()は確認することはなかったということです。

オプション2は、structメンバーのサイズをオーバーランさせることです。sizeof()を使用してstrncpy()を代わりに使用することができます。

+0

私はmemsetを使用してstrnpyをstrcpyに置き換えましたが、それでも問題は解決しません – Seelamsetty

関連する問題