C ++ char * x = fgets()不起作用

时间:2017-01-27 03:18:20

标签: c++

我在C ++中的脚本给我这个结果没有任何错误:

1 2 按任意键继续......

这是我的计划:

    const char* fileName = "kwerendy.txt";
    FILE * file = fopen(fileName, "r");
    while (! feof(file))
    {
        printf("1\n");
        char* row;
        printf("2\n");
        fgets(row, 1000, file);
        printf("3\n");
        int i = 0;
        printf("4\n");
        cout << "TEXT (line[" << i << "]): " << row;
    }

你有任何想法,因为我不知道如何修复它。

1 个答案:

答案 0 :(得分:2)

row未分配值,因此您正在写入任意内存地址 - 这非常糟糕。它是未定义的行为,即使它现在有效,它很可能在将来失败。您需要为fgets读取的字符分配空间。或者您可以将row声明为静态数组:

char row[buffer_size];
fgets(row, buffer_size, file);

更好的方法是将ifstreamstring s:

一起使用
std::ifstream file(fileName);
std::string line;
int i = 0;
while (getline(file, line)) {
    std::cout << "TEXT (line[" << i++ << "]): "
              << line << std::endl;
}