【发布时间】:2017-03-26 14:55:30
【问题描述】:
我正在尝试使用 fgets 读取文件并使用 strtok 对其进行标记,但不知何故我丢失了第一个标记(标题)的最后一个字符。我已经尝试了一段时间来解决这个问题,但似乎无法做到这一点,任何帮助表示赞赏。我已经在分隔符之前添加了一个字符,但我不太确定如何实现。
char line[201];
char *title;
int year;
char *age;
char *genre;
int lenght;
float rating;
while ((fgets(line,sizeof(line),fp)) != NULL){
strtok(line,"\"");
title = line;
year = atoi(strtok(NULL,","));
age = strtok(NULL,",");
memmove(age, age+1, strlen(age));
genre = strtok(NULL,",");
memmove(genre, genre+1, strlen(genre));
lenght = atoi(strtok(NULL,","));
rating = atof(strtok(NULL,","));
x = new_film(title,year,age,genre,lenght,rating);
Insert(root, x);
}
文件数据如下所示:
“好,坏,丑”,1966,“批准”,“西方”,161,8.9 《纪念品》,2000,”R”,”神秘/惊悚”,113,8.5
输出如下所示:
The Good, the Bad and the Ugl,1966,批准,西方,161,8.9
【问题讨论】:
-
无法从显示的代码中重现(尽管它留下了一些不受欢迎的
"标记)。它必须在您未显示的代码中。例如,我得到"The Good, the Bad and the Ugly,所以我的猜测是其中一个函数正试图通过猜测来去除引号,这些已经被删除了。 -
你对
strtok的使用很糟糕——你从不检查它的返回值,并且你忽略了它的第一个返回值——这就是为什么你的标题以"开头的原因。还有那些讨厌的字符串移位? -
strtok(line,"\""); title = line;-->title = strtok(line,"\""); -
@WeatherVane im 使用 memmove 删除前导“和尾随”被 strtok 删除,尽管它不应该?而我现在这样做太可怕了,我刚刚破解了它,并将返回以使其更清洁、更好
-
这不是我的错。