如何读取字符串传递换行符?

时间:2015-03-28 21:35:08

标签: c string fgets

我必须阅读

等文件
apple
grape
banana

并将其存储到一个字符串中,但是fgets只读取到换行符并停止,因此它只能在apple中读取。

我如何解决这个问题?或者如何将三个单词全部存储为单独的字符串?

char* readFile(const char *fileName)
{
    FILE *inFile;
    inFile=fopen(fileName, "r");

    char **stringInFile;
    stringInFile = malloc(sizeof(char*)*50);
    char *data = fgets(stringInFile,50,inFile);
    printf("%s", data);

    fclose(inFile);

    return data;
}

这完全在C btw。

2 个答案:

答案 0 :(得分:2)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char** readFile(const char *fileName);

int main(int argc, char **argv){
    char **data = readFile(argv[1]);
    int i;
    for(i=0; data[i] ; ++i){
        puts(data[i]);
        free(data[i]);
    }
    free(data);
    return 0;
}

char** readFile(const char *fileName){
    FILE *inFile;
    inFile=fopen(fileName, "r");

    char **stringInFile;
    stringInFile = calloc(50, sizeof(char*));
    char line[256];
    int i = 0;
    while(fgets(line, sizeof(line), inFile)){
        char *p = strchr(line, '\n');
        if(p)
            *p = 0;
        if(i < 50 - 1)
            stringInFile[i++] = strdup(line);
    }

    fclose(inFile);

    return stringInFile;
}

答案 1 :(得分:0)

fgets()仅在每次调用时读取一个行,并将文件courser设置为下一行。如果要读取完整文件,则必须迭代它。要检查您是否在最后,可以使用feof()检查EOF标志。 结果,对我来说工作:

char* readFile(const char *fileName)
{
FILE *inFile;
inFile=fopen(fileName, "r");

char **stringInFile;
stringInFile = malloc(sizeof(char*)*50);
while(!feof(inFile))
{
  printf("%s", fgets(stringInFile,50,inFile));
}

fclose(inFile);

return stringInFile;
}

并且,您不需要变量data - fgets()第一个参数是一个字符数组,它在哪里自动存储(例如程序中的Apple)。