0

大家好,我正在尝试编写一个返回数据行并以字符串形式返回的函数。下面是我的代码,我不确定它为什么不起作用。我添加了一个 printf 函数,当我调用该函数时,什么都没有打印出来。?

编辑(因为我还不能回答) - 感谢您的回复。当我将 char c 更改为 char *c 时,它仍然不起作用。我只需要将行读入字符串并返回即可。

char* getLine(FILE *file, int lineNum){

    char c;
    int lineCount=0, size = 1;
    char *line = NULL;
    line = malloc(sizeof(char)*size);
    while ((c=getc(file)) != EOF){

        if (c=='\n'){
            ++lineCount;
            continue;
        }
        if (lineCount==lineNum){
            size += 1;
            line = realloc(line, size*sizeof(char));
            strcat(line, c);
            printf("Line: %s\n", line);
        }
    }
    return line;
}
4

2 回答 2

5

变量c不是类型const char * 请参阅strcat 文档

于 2013-10-08T23:46:57.360 回答
0

它不是很有效,但它应该做你想做的事:

请注意,lineCount 从 0 开始。(第一行是第 0 行)。

char* getLine(FILE *file, int lineNum){
    char c;
    int lineCount=0, size = 0; // start size at zero, not one
    char *line = NULL;

    while ((c=getc(file)) != EOF){
        if (lineCount==lineNum){
            size += 1;
            if(line == NULL) {
                line = calloc(sizeof(char), size); 
            } else {
                line = realloc(line, size*sizeof(char));
            }
            char ac[2] = { c, 0 }; // this line is new
            strcat(line, ac); // ac is new here
            printf("Line: %s\n", line);
            if(c == '\n') {
                return line;
            }
        }
        if (c=='\n'){
            ++lineCount;
        }
    }
    printf("Could not find line %d\n", lineNum);
    return NULL;
}
于 2013-10-09T00:22:25.023 回答