を使用してファイルから構造体にデータを読み込まなければならない問題に取り組んでいます。
ファイルは、名前、# で終わる数行の 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;
}