我尝试使用fscanf来读取和打印屏幕上的每个字符,但是当我运行程序时,我遇到了分段错误(核心转储)。这是我的代码:
#include <stdio.h>
main(int argc, char * argv[]) {
int *a ;
FILE *input;
if (argc>=2) {
input= fopen(argv[1],"r");
if (input!=NULL) {
while (feof(input)==0) {
fscanf(input,"%d\n",a);
printf("%d\n",*a);
}
fclose(input);
} else {
printf("Error!\n");
}
}
}
我提供文件作为参数,如下所示:
./myprog input.txt
文件input.txt
包含:
23
47
55
70
答案 0 :(得分:3)
变量a
未初始化为指向有效的内存地址。
因此,它很可能指向无效的内存地址。
以下是解决此问题的一种方法:
int *a = malloc(sizeof(int));
...
free(a); // when done using it
以下是另一种解决方法:
int b;
int *a = &b;
但我建议您按照以下步骤操作,以使其更简单,更清洁......
更改此内容:
int *a;
对此:
int a;
而且:
fscanf(input,"%d\n",a);
对此:
fscanf(input,"%d\n",&a);
答案 1 :(得分:2)
当你写:
int *a;
然后a
是一个指针,但目前它并不指向任何地方。
在将int
提供给fscanf
之前,您必须指出main()
的有效存储空间。
例如,在int b;
a = &b;
fscanf(input,"%d\n",a);
内:
feof
另外,你的循环错了。使用while ( 1 == fscanf(input,"%d\n",a) )
{
printf("%d\n", a);
}
几乎总是错误(更不用说,作为循环条件)。相反,您应该测试实际的读取操作。在你的情况下:
{{1}}