这是我第一次在这里发布一个问题-我已经搜索了一些相似的问题,但是没有一个是我找到的。
以下是我标题中的片段:

#define LINE_LEN_MAX 256

typedef struct line_description {
    char buffer[LINE_LEN_MAX + 1];
    [...]
} line;

下面是我的主要函数的片段:
int main(int argc, char *argv[]) {

    line *lineRead;

    //input: valid FILE *, read from cmdline
    //char buffer[LINE_LEN_MAX + 1];

    while(fgets(lineRead->buffer, LINE_LEN_MAX + 1, input) != NULL) {

        [...]

        memset(lineRead->buffer, 0, LINE_LEN_MAX + 1);
    }
}

我一直有个小毛病。如果我注释掉“memset()”行,在得到segfault之前,我可以从输入文件中准确地读取3行。
但是,如果我用一个本地字符[]替换“lineRead->buffer”,我就能完美地读取输入文件。
我对这里的结构有什么不理解的?我想我需要的是一个指向结构中char[]开头的指针,但显然这不是正在发生的事情。
编辑:抱歉,忘记指定:我没有使用动态内存。

最佳答案

lineRead在您的程序中是一个未初始化的指针,这可能不是您想要的。
您应该通过写入来为一行分配一些存储空间,例如line lineRead,这将在堆栈上分配line结构。然后使用.而不是->访问其成员。

10-08 07:35