ファイルから構造体にデータを読み込まなければならない問題に取り組んでいます。
ファイルは、名前、# で終わる数行の ASCII アート、および評価があるように編成されています。ここに例があります
Sample Name
( S )
( S )
# 5
私は次のように構造体を設定しています:
typedef struct
{
char* name;
char* art;
int rating;
}CASE;
私の問題は、segmentation fault
以下のコードで名前文字列にメモリを動的に割り当てようとすると、エラーが発生し続けることです。
/*FPin is file pointer to the txt file and all is the array of structs*/
void readFile(FILE* FPin, CASE** all)
{
CASE* walker = *all;
int count = 0;
char buffer[160];
char* bufferPtr = buffer;
char nameBuffer[100];
/*Reads in the name*/
while(fscanf(FPin, "%[^\n]", nameBuffer))
{
printf("string is %s\n", nameBuffer);
walker->name = (char*)malloc(sizeof(char)*(strlen(nameBuffer+1))); /*ERROR*/
strcpy(walker->name, nameBuffer);
}
return;
}
上記のコードにエラーがあると思われる場所を書き留めました。その行を追加するとエラーが発生し始めたからです。
私は基本的に、テキストから nameBuffer (配列) に名前を読み込んでから、strcpy を使用してこの名前を構造体にコピーしています。これを修正する方法について何かアドバイスはありますか?
ご覧いただきありがとうございます。
ソースの残りの部分を以下に示します。
int main (void)
{
CASE* all;
FILE* FPin;
if((FPin = fopen("art.txt", "r")) == NULL)
{
printf("Error opening file.");
exit(100);
}
allocateStructMem(&all);
readFile(FPin, &all);
fclose(FPin);
return 0;
}
void allocateStructMem (CASE** all)
{
if((*all = (CASE*)malloc(sizeof(CASE)*1000)) == NULL)
{
printf("Fatal memory error!\n");
exit(1);
}
return;
}