C - 读取.txt中的新行

时间:2014-11-22 17:35:28

标签: c fopen fgets fread

我正在创建一个程序来读取文件并计算.txt有多少单词。该程序工作正常,问题是如果txt有一个断行线它停止读取,所以我必须把我的所有文本放在一行。据我所知,问题出在fgets中,当它到达EOF或换行时会停止读取。我的问题是:即使使用新行,我如何读取文本?我必须使用fread()吗?如果是的话,我会这样做吗?下面是我读取.txt并放入数组的代码部分。

char linha[10000];
int grandezaStrings = 100000;
int i = 0;
int contadorString = 0;    

    //  This line reads the file.
    fgets (linha, grandezaStrings,myFile);

    // Used for special characters
    setlocale (LC_ALL,"PORTUGUESE");

    // Dynamic array to hold words
    char ** strings = (char **)malloc(grandezaStrings * sizeof (char*));
    char * pch;
    for (i=0;i<grandezaStrings; i++){
        strings[i] = (char *)malloc(100+1);
    }

    // Transfer all the words to my array.
    i = 0;
    pch = strtok(linha, " ,.!?:;()\n");
    while (pch != NULL){
        strlwr(pch);
        strings[i] = pch;
        contadorString++;
        pch = strtok (NULL, " ,.!?:;()\n");
        i++;
    }

非常感谢!

2 个答案:

答案 0 :(得分:0)

fgets读到下一个新行。它是设计。你可以循环(while (fgets(...) != NULL))或者如果你想在一次读取中加载内存中的所有内容,你可以使用fread

//  This line reads the whole file.
i = fread (linha, 1, grandezaStrings,myFile);
if (i < 0) { // test read Ok
    perror("Lettura");
    return 1;
}
linha[i] = '\0';  // add the terminating null

答案 1 :(得分:0)

使用fgets()从文件中逐行获取并在该行上执行操作。

while(fgets (linha, sizeof(linha),myFile) != NULL)
{
// perform the action on the line.
}

使用sizeof(linha)作为要读取的字符数。