c - 奇怪的 fgets() 问题

标签 c fgets

在使用 GCC 编译后,我试图在 Windows 7(64 位,如果重要的话)上运行这段代码。如果我将 bufsize 声明为 int,程序会卡住并且 Windows 会通知我它已停止工作。如果我使用 #define 缓冲区大小 123 它工作正常,如果我自己用数字替换 bufsize,它工作正常。我在这里缺少什么?

int main(int argc, char* argv[]) {

    char* filename = argv[1];

    FILE* problem = fopen(filename, "r");
    if (!problem) {
        printf("File doesn't exist\n");
        exit(1);
    }

    char* line;
    while (fgets(line, bufsize, problem) != NULL) {        
        printf(line);
    }


    return 0;
}

最佳答案

line是一个指针,但它没有指向任何地方(或者,更好的是,它还没有被初始化,它的值是不确定的和不可用的)。指向任何地方的指针不是很有用。

分配一些内存并生成line指向那个内存。请记得在不再需要时释放内存。

line = malloc(200);
if (line == NULL) { /* something went wrong, the pointer is pointing nowhere */ }
/* ... use allocated memory ... */
free(line);

哦……还有bufsize值应与您分配的字节数匹配。

还有 #include <stdlib.h>因为malloc()free()那里有他们的原型(prototype)。

关于c - 奇怪的 fgets() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3746750/

相关文章:

c - 包含要数组的数字的文本文件

c - 将参数传递给 execvp() 时出错

c - fscanf 不在变量中放置值

c - fgets 如何对待\n?

c++ - C 错误 "s1, s2 are used uninitialised in this function"

c - fgets 在没有接受输入的情况下失败

c - 无法访问类型转换的虚空指针

c - 如何在 C 语言中为 STM32F2 重置处理器

按升序组合两个整数文件,比较它们,然后将它们排序到第三个文件中,而不使用c中的数组

php - 使用 PHP 解析的大型 .txt 文件 (15.5mb)