问题描述
fgets(s,sizeof(str[i]),fp);
#include <stdio.h>
int main()
{
char *str[] = {"John ","Linus ","Michael ","Bill"};
char *s;
int i;
FILE* fp;
if((fp = fopen("E:\\Files\\string.txt","w")) == NULL)
{
printf("Error creating file");
return 0;
}
else
{
for(i = 0; i < 4; ++i)
{
fputs(str[i],fp);
fflush(fp);
}
fclose(fp);
}
if((fp = fopen("E:\\Files\\string.txt","r")) == NULL)
printf("Error opening file");
else
{
for(i = 0; i < 4; ++i)
{
fgets(s,fp);
printf("%s ",s);
}
fclose(fp);
}
return 0;
}
解决方法
关于:
fgets(s,sizeof(str[i]),fp);
变量s
只是一个未初始化的指针,它包含堆栈中每个垃圾堆所在位置的内容。使用该指针而不进行初始化会导致未定义行为,并且可能(如您所见会导致段错误事件。
建议将s
的定义更改为:
char s[sizeof(str)];
表达式sizeof(str[i]) is referencing a single byte,perhaps you meant:
sizeof(str);`