int main()
{
FILE *f;
f=fopen("new1.c","r");
for(;;)
{
char line[100];
char *token;
if (fgets(line, 80, f) == NULL) break;
token = strtok(line, " -n");
while (token) {
// Do something with token, for example:
printf("'%s' ", token);
token = strtok(NULL, " -n");
}
}
fclose(f);
return 0;
}
我哪里出错了,请指导程序运行时也会出现一些警告,并且运行时程序崩溃。
最佳答案
警告和崩溃是因为您没有包含正确的头文件。
在 C99 标准之前,编译器可以在发现未声明函数时猜测其原型(prototype),虽然编译器经常获得正确的参数,但返回类型始终为 int
.
现在接听 fopen
的电话,编译器会猜测参数是两个常量字符串( const char *
),但返回类型将是 int
而不是FILE *
正如预期的那样。这会导致问题,因为有符号整数和指针不是同一回事,并且如果您使用的是 64 位平台,其中指针是 64 位且 int
通常是32位,你会遇到很大的问题。所有这一切导致undefined behavior这是崩溃的常见原因。
要解决您的问题,包括警告和崩溃,您需要 #include
正确的头文件。对于文件函数( fopen
、 printf
等),它是 <stdio.h>
,对于字符串函数(例如 strtok
),它是 <string.h>
.
始终包含 header 正确的头文件。如果您不知道标准函数应包含哪个头文件,请搜索例如this excellent reference site .
关于c - 为什么当我们在下面的代码中逐行读取文件时程序会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31241580/