我的文件如下:
123456789
我的代码给了我分段错误:
#include <stdio.h>
int main(){
FILE *f;
char ch[5];
f = open("a.txt", "r");
fgets( ch, 4, f);
ch[4] = NULL;
printf("%s", ch); //Fixed
return 0;
}
我是一个绝对的初学者。我究竟做错了什么。我的目标是使用fgets
读取文件的前4个字符。
答案 0 :(得分:2)
你想做
printf("%s", ch);
对于%
格式,参数是指向字符的指针;通过按值传递单个字符,您告诉printf
将该字符的ASCII值解释为指针,这将会对您产生影响;也就是说,如果字符是1
,这是ASCII 49,那么它将在内存中查找字符串49以查找字符串 - 并且往下看通常是 verboten 。
但其次,我发现你正在呼叫open()
而不是fopen()
。您必须使用fopen()
,否则您将无法获得FILE*
。
这两者都可能导致段错误 - 你需要修复它们。
答案 1 :(得分:2)
尝试使用“fopen”而不是“open”
感谢。
答案 2 :(得分:2)
快速变化。
您需要将读取的字节数增加到5,最后一个由fgets终止为空。
int main() {
FILE *f;
char ch[5];
f = fopen("a.txt", "r");
fgets( ch, 5, f);
printf("%s", ch);
return 0;
}
答案 3 :(得分:0)
尝试使用
#include <stdio.h>
int main(){
FILE *f;
char ch[5];
f = fopen("a.txt", "r"); //use fopen
fgets( ch, 4, f);
ch[4] = NULL;
printf("%s", ch); // modification here pass the address of an array to printf
return 0;
}
尝试以下来自已审阅网站的示例
/* fgets example */
#include <stdio.h>
int main()
{
FILE * pFile;
char mystring [5];
pFile = fopen ("myfile.txt" , "r");
if (pFile == NULL) perror ("Error opening file");
else {
if ( fgets (mystring , 5 , pFile) != NULL )
puts (mystring);
fclose (pFile);
}
return 0;
}
参考http://www.cplusplus.com/reference/clibrary/cstdio/fgets/
您也可以使用