1

Cでファイルから構造体に書き込もうとしています。構造体に値を割り当てようとすると、エラーが発生します。割り当てに互換性のない型があります。

私の構造は次のようになります。

struct competition{
char eventTitle[79];
char date[79];
char time[79];
};

基本的に、ファイルを開いて、構造内の異なる値に個々の行を割り当てたいと思います。すなわち。ファイルの1行目->eventTitle、2行目->日付、3行目->時刻。

これが私がそれを割り当てようとする方法です:

FILE *naDaSt;
char *mode = "r";
int lines = 0;
char line[79], current[79];


naDaSt = fopen(nameDateStart, mode);
if(naDaSt == NULL){
    printf("Can't find the files.");
    exit(1);
}else{
    struct competition comp, *p;
    p = ∁
    while(fgets(line, 79, naDaSt)){
        lines++;
        if(lines == 1){
            p->eventTitle= line;
        }
        if(lines == 2){
            p->date = line;
        }
        if(lines == 3){
            p->time = line;
        }
    }
}    

}

誰か助けてもらえますか?

4

3 に答える 3

3

根本的な原因:

これを行うことはできません:

        p->eventTitle = line;
        p->date = line;
        p->time = line;

実行できない割り当てを使用してアレイを割り当てようとしています。アレイをコピーする必要があります。コンパイラは正しくエラーを報告します:

error: incompatible types in assignment

実際、割り当てようとしているタイプには互換性がないためです。

解決:

代わりに、strcpyを使用して文字配列をコピーし、割り当てないようにする必要があります。

于 2012-12-12T03:59:17.167 に答える
2

C:のような配列に割り当てることはできません。コピー関数のいずれかを使用して、値を配列にコピーする必要があります。

strcpy()
strncpy()  // This one is better to use

http://linux.die.net/man/3/strcpy

もう1つ考慮すべきことは、79コードにリテラル数が数回以上あり、それがすべての配列のサイズを示しているように見えることです。それらすべてに使用できる配列の長さを定義する方が簡単です。

#define LENGTH 79

struct competition
{
  char eventTitle[LENGTH];
  char date[LENGTH];
  char time[LENGTH];
};

fgets自分の呼び出しや最終的なstrncpy()呼び出しを読み取るときに、この定数を使用することもできます。

while(fgets(line, LENGTH, naDaSt))
strncpy( ..., ..., LENGTH);
于 2012-12-12T04:00:23.190 に答える
0

関数の使用はお勧めしませんstrncpy()。それはその癖があり、末尾に追加しません\0。を使用して、ある場所から別の場所に文字配列(文字列)をコピーする必要がありますstrcpy()

于 2012-12-12T04:02:50.277 に答える