gpt4 book ai didi

c - 使用指针而不是数组时出现段错误

转载 作者:行者123 更新时间:2023-11-30 20:15:46 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com