1

を使用してファイルから構造体にデータを読み込まなければならない問題に取り組んでいます。

ファイルは、名前、# で終わる数行の ASCII アート、および評価があるように編成されています。ここに例があります

Sample Name
( S )
( S )
# 5

私は次のように構造体を設定しています:

typedef struct
 {
   char* name;
   char* art;
   int rating;
 }CASE;

ソースをコンパイルすると、次の警告が表示され続けます。

multiple-character character constant
overflow in implicit constant conversion

この行buffer[artCount] = '/0';で、artCount はバッファ自体の strlen です。

文字配列の末尾に null 文字を追加して、strcpy に備えるだけです。ここで私の論理に何か問題がありますか?

関数:

/*CASE* all is an empty array of CASE structs*/
void readFile(FILE* FPin, CASE* all)
{
  CASE* walker = all;
  int count = 0;
  int artCount;
  char buffer[160];

  if((FPin = fopen("art.txt", "r")) == NULL)
  {
    printf("Error opening file.");
    exit(100);  
  }

 walker->name = (char*)malloc(sizeof(char)*100);

 /*Reads in the name*/
 while(fgets(walker->name, 100, FPin) != NULL)
  {

 /*Reads in the art*/
   while(fscanf(FPin, "%c", buffer) != '#');

   artCount = strlen(buffer);
   buffer[artCount] = '/0';
   walker->art = (char*)malloc(sizeof(char)*160);
   strcpy(walker->art, buffer);

/*Reads in the rating*/

     fscanf(FPin, "%d", &walker->rating);

   count++;
   walker++;
 } 

  fclose(FPin);
  return;
}
4

1 に答える 1

12

定数は、'\0'(スラッシュ) ではなく'/0'(バックスラッシュ) にする必要があります。

于 2012-04-23T21:46:05.210 に答える