gpt4 book ai didi

c - 为什么当我们在下面的代码中逐行读取文件时程序会崩溃?

转载 作者:行者123 更新时间:2023-11-30 21:21:00 25 4
gpt4 key购买 nike

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正确的头文件。对于文件函数( fopenprintf 等),它是 <stdio.h> ,对于字符串函数(例如 strtok ),它是 <string.h> .

始终包含 header 正确的头文件。如果您不知道标准函数应包含哪个头文件,请搜索例如this excellent reference site .

关于c - 为什么当我们在下面的代码中逐行读取文件时程序会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31241580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com