嗨,我目前正在尝试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);
}
答案 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
才能使用它。