嗨,我目前正在尝试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,我从中学会了这个技巧。