目前,我正在做这个:写作线采用C
FILE *fOut;
fOut = fopen("fileOut.txt", "w");
char line[255];
...
strcat(line, "\n");
fputs(line, fOut);
但发现当我在文本编辑器打开该文件,我得到
line 1
line 2
如果我删除的strcat (行,“\ n”);然后我得到。
line 1line2
如何获得FOUT是
line 1
line 2
目前,我正在做这个:写作线采用C
FILE *fOut;
fOut = fopen("fileOut.txt", "w");
char line[255];
...
strcat(line, "\n");
fputs(line, fOut);
但发现当我在文本编辑器打开该文件,我得到
line 1
line 2
如果我删除的strcat (行,“\ n”);然后我得到。
line 1line2
如何获得FOUT是
line 1
line 2
您可以尝试使用的\r
代替\n
。你在Windows上运行的是哪个平台?
使用w
(或wt
)打开文件时,Windows会用\r\n
替换\n
。
为了避免这种情况,打开该文件wb
(而不是w
)。
...
fOut = fopen("fileOut.txt", "wb");
...
不像许多其他的操作系统中,Windows使二进制和文本模式之间的区别,以及 - 容易混淆 - Windows的C运行时不同的方式处理这两种模式。
只是为了增加这个,'fputs'已经附加了一个新行,所以不需要明确地添加一行。 – 2012-03-08 16:38:56
@Mike Kwan:感谢您的评论。我相信你的意思是'puts'附加一个换行符。 AFAICT'fputs'没有。链接:http://www.cplusplus.com/reference/clibrary/cstdio/puts/ – bernie 2012-03-08 16:49:19
@MikeKwan:不; 'puts()'附加一个换行符; 'fputs()'不会追加换行符。同样,'gets()'移除一个换行符; 'fgets()'不会删除换行符。 – 2012-03-08 16:49:38
的puts()
功能追加一个新行到它被赋予写入stdout
字符串; fputs()
函数没有这样做。
既然你已经不是我们显示的所有代码,我们只能假设你做了什么。但是:
strcpy(line, "line1");
fputs(line, fOut);
putc('\n', fOut);
strcpy(line, "line2\n");
fputs(line, fOut);
会产生各自可使用两次来实现的一致性(和你的代码应该是一致的—休假典雅的变化“为您的文学写作,不适合你需要的结果,在两个略有不同的方式你的编程)。
在评论,你说:
实际上我通过文件加密循环的每一行,然后写该行到一个新的文件。
哦,孩子!你是base-64编码加密数据吗?如果没有,那么:
fopen()
模式(如fOut = fopen("fileout.bin", "wb");
)b
因为加密的数据是二进制数据,而不是文本数据。这个(b
)对于Unix和Windows都是安全的,但是在Windows上非常重要,在Unix上非常重要。fputs()
写入数据;会有零个字节('\0'
)之间的加密值和fputs()
将在第一那些遇到的停止。您可能需要使用fwrite()
来告诉它每次要写入多少个字节。"rb"
并使用fread()
来读取它。如果你是base-64编码你的加密数据,那么你可以回到输出为文本;这就是base-64编码的要点。
这也没有效果 – Dunc 2012-03-08 17:03:22
@Dunc:你只是说“这没有用”而已。 **发生了什么? *你观察到了什么?*** – 2012-03-08 17:21:54
只是好奇:你如何在追加换行符之前填充'line'? – 2012-03-08 16:43:59
定义“我得到”。你如何分析文件内容? – 2012-03-08 16:57:03
@torrentialcoding我实际上是循环遍历每行加密的文件,然后将该行写入新文件。 – Dunc 2012-03-08 16:59:06