[英]Trying to read data from a file and tokenize it in c using strtok() and fgets()
我正在尝试使用fgets()从文本文件中读取数据,并使用“ |”标记它 定界符并将结果存储在名为“ menuresult []”的数组中。 到目前为止,它正在失败。 它给了我一个段错误,而valgrind似乎认为这是因为“ strdup”这一行。 我的想法已经用完了。 任何帮助,将不胜感激。 到目前为止,这是我的代码:
FILE *menufile = fopen("menu.dat", "r");
char *menuresult[1024];
while((fgets(line, sizeof(line), menufile)) != NULL) {
if (i == 0) {
token = strtok(line, "|");
menuresult[i] = strdup(token);
}
else {
token = strtok(NULL, "|");
menuresult[i] = strdup(token);
}
i++;
}
我认为您可能需要这些更改-
FILE *menufile = fopen("menu.dat", "r");
char *menuresult[1024];
while((fgets(line, sizeof(line), menufile)) != NULL) {
while((token = strtok(line, "|")) != NULL){
menuresult[i] = strdup(token);
i++;
}
}
考虑一下:到达行尾时,您要将NULL
传递给strdup
,这会导致未定义的行为。 您需要一个循环来解析文件的每一行,如下所示:
while((fgets(line, sizeof(line), menufile)) != NULL) {
token = strtok(line, "|");
menuresult[i] = strdup(token);
printf("%s\n", menuresult[i]);
i++;
while(token){
token = strtok(NULL, "|");
if(token)
{
menuresult[i] = strdup(token);
printf("%s\n", menuresult[i]);
}
i++;
}
}
您没有检查可返回null的strtok的返回值,而在while循环中加上替换行,strtok在内部跟踪字符串,这就是为什么您传递null的原因,您可能需要一个double while循环吗?
while read file while strtok != null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.