-2
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);
4

1 回答 1

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()

于 2013-05-22T18:15:41.403 回答