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

标签 c pointers segmentation-fault

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/

相关文章:

c - 使用 SDL_Net 查找 UDP 广播源 IP

c - kbhit 实现的问题

c++ - nullptr 和指针算法

c - typedef 在 C 中存储指针

assembly - 是什么导致这个程序出现段错误?

C 结构未初始化的外部构造函数

c - C语言中#line是什么意思?

c - 指针初始化无法识别定义的类型

c++ - "Out of bound iterator"为空集

python - PyQt:使用 QApplication.quit 时偶尔出现段错误