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);
最佳答案
char *buf;
这是一个指针,没有与之关联的内存。
fscanf(fname,"%c",buf);
正在尝试将内存放入该指针中。它需要进行 malloc
处理,或者定义为不会从 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()
模式,该模式有点令人讨厌,或者保证缓冲区足够大以适合您的文件。
关于c - 使用指针而不是数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16698567/