从C中的文本文件中读取字符串

时间:2015-10-16 22:40:17

标签: c string file struct strtok

我需要编写一个程序,从文本文件中读取字符串并将每个单词存储在结构中,即如果文本文件中的第一行是:

TOYOTA COROLLA 2014白色

丰田将进入structname.model,corolla将进入structname.make等。 我在将每个字符串读入结构中的相应元素时遇到了麻烦。我的源代码(我没有在这里发布它很长,很大一部分与这个问题无关)编译没有错误,但我99%肯定这是我的循环问题应该是阅读价值观:

carRecord cars[10]; //declares array of structs containing carRecord info
char filename[256];
char buf[256];
FILE *carfile;

printf("Please enter the name of a file to read car records from (followed by the file extension): ");
scanf("%s", filename);

carfile = fopen(filename, "r");

if (!carfile)
{
    printf("File failed to open.\n");
}

printf("ERROR CHECK 1");

int i = 0;
while ((fgets(buf, sizeof(buf), carfile) != NULL) && i < 10)
{
    cars[i].make = strdup(strtok(buf, " "));

    cars[i].model = strdup(strtok(buf, " "));

    cars[i].year = atoi(strdup(strtok(buf, " ")));

    cars[i].color = strdup(strtok(buf, " "));

    i++;
}

打印第一个错误检查,然后程序崩溃。我有一个强大,可怕的感觉这与malloc命令有关,但我对C很新,并且完全不知道如何实现它。

如果有帮助的话,carRecord的struct声明是:

struct carRecord{
    char* make;     //make of car
    char* model;    //model of car
    int year;           //year of car
    char* color;    //color of car
};

(编辑:代码已更新以反映以下评论)

1 个答案:

答案 0 :(得分:0)

我很确定,如果你为结构元素分配内存,你将获得理想的结果。另外,正如您所提到的,使用calloc / malloc。

struct carRecord{
    char make[100];     //make of car
    char model[100];    //model of car
    int year;           //year of car
    char color[100];    //color of car
};