我试图在名为" a_function()"的函数中运行fgets()。
int a_function(){
char* str;
FILE *fp;
fp = fopen( "./file.txt", "r" );
if( NULL != fp ){
fgets( str, 6, fp );
printf( "%s\n", str );
}else{
printf( "cannot find file\n" );
return 1;
}
return 0;
}
int main(void){
a_function();
return 0;
}
但是这样做会导致在调用fgets()函数时发生段错误。有趣的是,我可以将我的代码从a_function逐字复制到我的main()函数中,一切运行正常:
#include <stdio.h>
#include <stdlib.h>
int a_function(){
return 0;
}
int main(void){
a_function();
char* str;
FILE *fp;
fp = fopen( "./file.txt", "r" );
if( NULL != fp ){
fgets( str, 6, fp );
printf( "%s\n", str );
}else{
printf( "cannot find file\n" );
return 1;
}
return 0;
}
代码正在通过以下方式编译:
gcc -g -std=c11 test.c -o test
我在这里缺少什么?这是我的代码或我的电脑的问题?任何帮助表示赞赏。谢谢
答案 0 :(得分:5)
char* str;
fgets( str, 6, fp );
在这两种情况下,您都在执行上面的代码,这里str
未初始化,其中包含不确定的值,输入到它会导致未定义的行为。这两种情况都是不正确的,即使它有时也不会崩溃。
尝试执行以下操作:
char str[6];
fgets(str, sizeof str, fp);
答案 1 :(得分:2)
str
未初始化,即它没有指向有效内存。因此fgets
会导致未定义的行为。
要解决此问题,请将char* str
更改为char str[6];