getline(char ** lineptr,size_t * n,FILE * stream)返回凌乱的代码

时间:2017-05-02 04:09:13

标签: c++

我正在使用ssize_t getline(char **lineptr, size_t *n, FILE *stream)逐行读取配置文件。但它继续返回凌乱的代码,而这个循环永远不会结束。

以下是代码片段:

char line[MAX_LINE];
size_t max_line = MAX_LINE;
while (-1 != getline((char **)&line, &max_line, file)) {
    cout<<"> "<<line<<endl;
    lines.push_back(string(line));
}

输出:

> `7▒▒
> `7▒▒
> `7▒▒

我读了这个男人页并跟着它。我不知道我做错了什么。请帮忙!

1 个答案:

答案 0 :(得分:0)

也许您想使用std::getline

#include <string>
#include <list>
#include <fstream>
#include <iostream>

using namespace std;

int main()
{
    ifstream file("input.txt");
    list<string> lines;
    string line;
    while (getline(file, lie)) {
        cout << "> " << line << endl;
        lines.push_back(line);
    }
}

如果您想使用getline from linux,那么它应该是这样的:

#define _GNU_SOURCE
#include <stdio.h>
#include <string>
#include <list>

using namespace std;

int main()
{
    FILE* file = fopen("input.txt");
    list<string> lines;
    char *line = NULL;
    size_t len = 0;
    ssize_t nread;
    while ((nread = getline(&line, &len, file)) != -1) {
        cout << "> " << line << endl;
        lines.push_back(string(line, nread));
    }
    free(line);
    fclose(stream);
}