2010-12-13 19 views
0

宿題の割り当てについては、CSVパーサーを使用しています。私は物事を働かせようとしていますが、私は問題にぶつかってきました。構造体の "field"値に値を代入することはできません。彼らは、彼らが持って提供されたコードでは:20と、彼らが持っているものを見てみると15で定義された上記の定数でCの構造体値への配列の割り当て

typedef char f_string[MAX_CHARS+1] ; /* string for each field */ 

    typedef struct { 
     int nfields;      /* 0 => end of file */ 
     f_string field[MAX_FIELDS];   /* array of strings for fields */ 
    } csv_line ; 

、構造体が保持してint型、およびそれがf_stringのtypedefを移入する必要がある配列を保持します彼らは以前に定義した。よかった、冷たい。私は、このようにそれを実行しようとしました:

f_string test = "Hello, Bob"; 
f_string testAgain = "this is dumb, k?"; 
f_string anArray[MAX_FIELDS] = {*test, *testAgain}; 

csv_line aLine; 
aLine.nfields = 3; 
aLine.field = *anArray; 

私は「anArray」を作るとき、私がテストし、testAgainするデリファレンスを持っていない場合、私はキャストせずに、ポインタに整数を作るについての警告を取得します。だから私は、それらを残ししかし、行:。

aLine.field = *anArray; 

はエラーを返します:「csv.c:87:エラー:割り当てで互換性のない型」がポインタの有無にかかわらず...私はわからないんだけどどのように私はその変数を割り当てる必要がありますか?助けていただければ幸いです!

答えて

5

=を使用して配列に割り当てることはできません。詳細な説明については、this questionを参照してください。また

for (int i = 0; i < aLine.nfields; ++i) 
{ 
    strncpy(aLine.field[i], anArray[i], MAX_CHARS); 
} 

、あなたが提供するテストコードは、あなたが期待する何をするつもりはない:あなたはstrcpy(またはより安全なstrncpy)関数は、使用して各文字列をコピーする必要があります

f_string test = "Hello, Bob"; 
f_string testAgain = "this is dumb, k?"; 
f_string anArray[MAX_FIELDS] = {*test, *testAgain}; 

これは最初の文字testtestAgainをコピーします。アリーン `で

f_string anArray[MAX_FIELDS] = {"Hello, Bob", "this is dumb, k"}; 
+2

注配列が既に持っていない限り、これは必ずしも文字列をNULLで終了しないこと' '\ 0'':ちょうど

f_string test = "Hello, Bob"; f_string testAgain = "this is dumb, k?"; f_string anArray[MAX_FIELDS]; strcpy(anArray[0], test); strcpy(anArray[1], testAgain); 

または:あなたのような何かをする必要があり.field [i] [MAX_CHARS] '。 – caf

+0

私は上記のコードは動作していないことに気がつきました。あなたのコードでは、それらをstrcpyにしなければなりませんでした。ありがとう! –

関連する問題