我有一个奇怪的问题:
我将文件读入buf并尝试在ssh(Linux)中运行..
我的文件包含:
We
I
a
所以这是我的buf:
现在我创建一个新文件并将buf粘贴到这个新文件中:
FILE*nem_file_name;
nem_file_name= fopen("email1.clear","wb"); //create the file if not exist.
fwrite (buf, sizeof(char), strlen(buf),nem_file_name); //write the new sensored mail to the file.
在这种情况下,文件:email1.clear已创建,但它包含的内容如下:
We Ia
当我将其复制到剪贴板并将其粘贴到此主题时,它被粘贴:
We
I
a
为什么我的档案中没有“终点线”?我希望它像我在剪贴板中的内容一样:/
更新 我尝试通过以下方式手动创建buf:
char buf[10];
buf[0] = 'W';
buf[1] = 'e';
buf[2] = 32;
buf[3] = 13;
buf[4] = 10;
buf[5] = 'I';
buf[6] = 13;
buf[7] = 10;
buf[8] = 'a';
buf[9] = 0;
(请注意,我没有将文件读入buf,而是手动执行)
然后:
FILE*nem_file_name;
nem_file_name= fopen("email1.clear","wb"); //create the file if not exist.
fwrite (buf, sizeof(char), strlen(buf),nem_file_name);
并且文件email1.clear
已根据需要创建:
We
I
a
我无法理解!
答案 0 :(得分:1)
调试器截图是否真的来自您的Linux环境?或者你是否在Windows调试器上创建它?
这取决于您如何阅读原始文件。我在r
调用时使用文本模式(rt
或fopen
),Linux会在阅读过程中将CRLF(13,10)转换为单个LF(10)字符。将其写入二进制模式的新文件(如代码中wb
)时,它将保留一个LF。
记事本不能将单个LF字符作为换行符处理,但是,您的webbrowser显然会这样做。
<强>更新强>:
不同操作系统对行尾字符的处理方式不同。在文本模式下打开文件时,在读/写期间处理差异并转换为/从系统模式转换。在二进制模式下,字节按原样读取和写入,无需转换(fopen documentation)。
这取决于程序应该运行的位置以及客户端应该读取输出的内容(Linux / Windows)。当你的代码在linux上运行时,从linux读取文本文件并生成要在linux中使用的文本文件,使用文本模式(同样适用于windows)。如果您需要混合平台,您可能必须自己转换行结束。
答案 1 :(得分:1)
这是一个文本,为什么要将它写入二进制文件("wb"
)?只需使用文本文件,一切都应该没问题(当你读取文件和写文件时,从文件打开模式中删除b
)
答案 2 :(得分:-1)
我认为strlen(buf)将返回buf 的大小而不是标记字符串结尾的null char。您可以尝试写入您的文件:
fwrite (buf, sizeof(char), strlen(buf), nem_file_name);
char eos = '\0';
fputc (eos, nem_file_name);
我的猜测。祝你好运!