我动态分配的文件行阅读器有什么问题

时间:2017-10-26 01:05:15

标签: c memory-management dynamic malloc realloc

我对我的函数的约束是它从流,文件或标准输入中读取,并且它读取到换行符并在检测到EOF时结束。

char* getLine(FILE* stream)
{
    int capacity = LINE_MAX;
    char* buffer = malloc(capacity);
    int len = 0;
    char ch;
    while ((ch = fgetc(stream)) != '\n' && ch != EOF) {
        if (ch == EOF)
            return NULL;
        if (len >= capacity) {
            capacity *= 2;
            buffer = realloc(buffer, len * sizeof(char));
        }
        buffer[len++] = ch;
    }
    buffer[len] = '\0';
    if (buffer == NULL)
        return NULL;
    return buffer;
}

我不能指望我的输入有特定的长度。我的主要问题是,在main中使用它时;

int main()
{
    FILE* stream = stdin; // stdin now
    while (true) {
        char cmd[COMMAND_MAX];
        char* arg;
        char* rest;
        char* line;

        printf("command $: ");
        line = getLine(stream);

        if (line == NULL) {
            exit(EXIT_SUCCESS);
        }

        arg = malloc(REMAINING_MAX * sizeof(char));
        rest = malloc(REMAINING_MAX * sizeof(char));
        int arguments = sscanf(line, "%s %s %[^\n]s", cmd, arg, rest);
        free(arg);
        printf("\n");
        printf("%s, %s, %s", cmd, arg, rest);
        free(rest);
        free(line);
        return 0;
}

当我按Enter键时,在实际程序中,我会收到重复的输入,几乎就像它没有输入数据一样。它只是卡在记忆中。如果我用scanf做了这个,它可以很好地工作,但问题是我不能像以前发现的那样为它动态分配内存。

0 个答案:

没有答案