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);
}

使用:

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,我从中学会了这个技巧。

最新更新