char temp[100];
char event[1000];
int i = 0;
do {
while (true) {
**fscanf(fin, "%s", &temp);**
if (temp != "BEGIN:VEVENT" || temp != "BEGIN:VCALENDAR") {
strcat(event, temp);
}
if (temp == "END:VEVENT") {
Events[i][0] = *event;
i++;
break;
} else if (temp == "END:VCALENDAR") {
//temp = EOF;
break;
}
}
fprintf(stdout, "%s\n", Events[i - 1]);
} while (*temp != EOF);
我用星号包围的线条导致了seg。故障。我不能,为了我的生活,弄清楚发生了什么。
答案 0 :(得分:2)
如果行超过100个字符,则可能遇到缓冲区溢出。如果您只想获得一行输入,请改用fgets
:
if(fgets(temp, sizeof(temp), fin) == NULL) {
perror("fgets");
/* return a failure code */
}
您也无法使用==
和!=
来比较字符串;请改用strcmp
。
我相信您的代码崩溃是因为temp != "BEGIN:VEVENT"
始终为true(temp
缓冲区的地址永远不会等于常量字符串的地址),因此您将继续{{1}直到缓冲区空间不足,导致程序缓冲溢出strcat
并崩溃。
答案 1 :(得分:1)
你确定是那条线吗?如果是这样,您可能会有缓冲区溢出。另外,您不应将&temp
传递给fscanf
。如果你使用没有索引的数组,你可以把它想象成一个指针(尽管从技术上讲它不是)。所以你应该这样做:
fscanf(fin, "%s", temp);
另外,你这样做:
strcat(event, temp);
但event
未初始化。您需要至少终止event
字符串,否则strcat
最终可能会搜索整个数组(取决于其中未初始化的值),并且可能会溢出:
char event[1000];
event[0] = 0;