fgetc() 将回车符 return 添加到换行符
fgetc() adds carriage return to line feed
我正在尝试制作一个将多个文件连接成一个文件的程序。我目前拥有的代码如下:
#include <string.h>
#include <stdio.h>
void main(int n, char** args) {
if (n < 2) printf("Too few arguments. Format: <output> [files...]");
FILE* output = fopen(args[1], "w");
for (int i = 2; i < n; i++) {
FILE* curr = fopen(args[i], "rb");
while (!feof(curr)) {
int c = fgetc(curr);
fputc(c, output);
}
fclose(curr);
}
fclose(output);
}
但是,当我在一个文件中有 \n 时,fgetc
在新文件中的 \n 后面添加了 \r。我试过以二进制方式打开文件,但它仍然在所有 \n-s 后面添加了额外的 \r。
如何取消此功能?
由于您以二进制模式 ("rb"
) 打开输入文件,您会得到 CR/LF 行尾序列作为单独的字节 '\r'
和 '\n'
,在遗留系统上作为 CR/CR/LF 序列存储到输出文件中,因为以文本模式打开的输出文件将 '\n'
转换为 CR/LF 并存储 '\r'
不变作为 CR.
同样以二进制模式打开输出文件,"wb"
。
还解决了一些其他问题,如下所示:
#include <errno.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
if (argc < 2) {
fprintf(stderr, "Missing arguments. Format: <output> [files...]\n");
return 2;
}
FILE *output = fopen(argv[1], "wb");
if (output == NULL) {
fprintf(stderr, "Cannot open output file '%s': %s\n",
argv[1], strerror(errno));
return 1;
}
for (int i = 2; i < argc; i++) {
int c;
FILE *curr = fopen(argv[i], "rb");
if (curr == NULL) {
fprintf(stderr, "Cannot open input file '%s': %s\n",
argv[i], strerror(errno));
continue;
}
while ((c = fgetc(curr)) != EOF) {
fputc(c, output);
}
fclose(curr);
}
fclose(output);
return 0;
}
我正在尝试制作一个将多个文件连接成一个文件的程序。我目前拥有的代码如下:
#include <string.h>
#include <stdio.h>
void main(int n, char** args) {
if (n < 2) printf("Too few arguments. Format: <output> [files...]");
FILE* output = fopen(args[1], "w");
for (int i = 2; i < n; i++) {
FILE* curr = fopen(args[i], "rb");
while (!feof(curr)) {
int c = fgetc(curr);
fputc(c, output);
}
fclose(curr);
}
fclose(output);
}
但是,当我在一个文件中有 \n 时,fgetc
在新文件中的 \n 后面添加了 \r。我试过以二进制方式打开文件,但它仍然在所有 \n-s 后面添加了额外的 \r。
如何取消此功能?
由于您以二进制模式 ("rb"
) 打开输入文件,您会得到 CR/LF 行尾序列作为单独的字节 '\r'
和 '\n'
,在遗留系统上作为 CR/CR/LF 序列存储到输出文件中,因为以文本模式打开的输出文件将 '\n'
转换为 CR/LF 并存储 '\r'
不变作为 CR.
同样以二进制模式打开输出文件,"wb"
。
还解决了一些其他问题,如下所示:
#include <errno.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
if (argc < 2) {
fprintf(stderr, "Missing arguments. Format: <output> [files...]\n");
return 2;
}
FILE *output = fopen(argv[1], "wb");
if (output == NULL) {
fprintf(stderr, "Cannot open output file '%s': %s\n",
argv[1], strerror(errno));
return 1;
}
for (int i = 2; i < argc; i++) {
int c;
FILE *curr = fopen(argv[i], "rb");
if (curr == NULL) {
fprintf(stderr, "Cannot open input file '%s': %s\n",
argv[i], strerror(errno));
continue;
}
while ((c = fgetc(curr)) != EOF) {
fputc(c, output);
}
fclose(curr);
}
fclose(output);
return 0;
}