读取文件时忽略带有fgets()的换行符

时间:2020-04-28 09:50:14

标签: c fgets

嗨,我目前正在尝试C编程,但有点卡住了。我正在尝试逐行读取.txt文件,并使用fgets()分别处理每行,但是我需要忽略文件中的换行符,因为它会影响我的代码的输出。任何帮助都会很棒。在此先感谢:)

static void Test ()
{

    int bufferLength;
    char* buffer = malloc(bufferLength);

    FILE *file = fopen("testing.txt", "r");

    while(fgets(buffer, bufferLength, file)) {
        FILE *file2 = fopen("tester.txt", "w");
        fprintf(file2, "%s", buffer);
        fclose(file2);
        FILE *file3 = fopen("tester.txt", "r");
        process(file3);
        fclose(file3);
    }

    fclose(file);
}

1 个答案:

答案 0 :(得分:2)

使用:

 buffer[strcspn(buffer, "\n")] = 0;

while循环内部,就在进入循环主体之后。

请注意,bufferLength未被任何值初始化,并且由于它是auto动态存储持续时间的对象,因此它将包含垃圾值。以这种方式使用bufferLength是未定义的行为。

bufferLength初始化为任何合理的缓冲区长度,例如:

int bufferLength = 20;

它应该是这样的:

static void Test ()
{

    int bufferLength = 20;
    char* buffer = malloc(bufferLength);

    FILE *file = fopen("testing.txt", "r");

    while(fgets(buffer, bufferLength, file)) {
        buffer[strcspn(buffer, "\n")] = 0;        // <-- here.
        FILE *file2 = fopen("tester.txt", "w");
        fprintf(file2, "%s", buffer);
        fclose(file2);
        FILE *file3 = fopen("tester.txt", "r");
        process(file3);
        fclose(file3);
    }

    fclose(file);
}

旁注:函数strcspn()string.h的标题中定义。您需要#include才能使用它。

信贷转到@Tim Cas,从中我学到了这个窍门here