while(!feof(fname))
{
fscanf(fname,"%c",buf);
printf("%c",*buf);
buf++;
}
当我使用此代码时,编译器会给我一个分段错误(核心转储)。 但如果我使用
而不是这个int i = 0;
while(!feof(fname))
{
fscanf(fname,"%c",&buf[i]);
printf("%c",buf[i]);
i++;
}
此代码运行正常,并读取文件的内容。 在递增数组指针而不是将其用作数组时,我做错了什么? 整个代码是
FILE *fname;
fname = fopen("input.txt", "r");
int i;
char *buf;
i=0;
while(!feof(fname))
{
fscanf(fname,"%c",buf);
printf("%c",*buf);
buf++;
}
fclose(fname);
答案 0 :(得分:2)
char *buf;
这是一个指针,没有与之关联的内存。
fscanf(fname,"%c",buf);
正在尝试将内存放入此指针。它需要为malloc
'd,或者定义为不会从fscanf()
输入溢出的char数组。
也许:
#define MAX_STRING_SIZE 255
char buf[MAX_STRING_SIZE];
其他信息修改
如果您需要移动指针,请创建第二个并使用它:
#define MAX_STRING_SIZE 255
char buffer_memory[MAX_STRING_SIZE];
char *buf = buffer_memory;
...
fscanf(fname,"%c",buf);
printf("%c",*buf);
buf++;
直到你读了255个字符,此时会发生不好的事情。如果您事先不知道文件的大小(ftell()
),那么您将需要使用链接列表系统,realloc()
模式,这有点icky,或者是一个保证的缓冲区要足够大以适应你的文件。