C++ 向文件中插入文本(未输入结束行)

C++ 向文件中插入文本(未输入结束行),c++,linux,file,endl,C++,Linux,File,Endl,我有一个奇怪的问题: 我将一个文件读入buf并尝试在ssh(Linux)中运行它 我的文件包含: We I a 这是我的男朋友: 现在,我创建一个新文件,并将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); //wri

我有一个奇怪的问题:

我将一个文件读入buf并尝试在ssh(Linux)中运行它

我的文件包含:

We 
I
a
这是我的男朋友:

现在,我创建一个新文件,并将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
我不明白

我认为strlen(buf)将返回buf的大小,而不返回标记字符串结尾的空字符。您可以尝试这样写入文件:

fwrite (buf, sizeof(char), strlen(buf), nem_file_name);
char eos = '\0';
fputc (eos, nem_file_name);

只是我的猜测。祝你好运

调试器屏幕截图实际上来自您的linux环境吗?还是在windows调试器上创建的

这取决于您如何读取原始文件。如果您使用文本模式(
r
rt
fopen
调用中),Linux将在读取期间将CRLF(13,10)转换为单个LF(10)字符。当以二进制模式(
wb
)将其写入新文件时,它将保持为单个LF

记事本不能将单个LF字符作为换行符处理,但是,您的webbrowser显然可以

更新
不同的操作系统对行尾字符的处理方式不同。在文本模式下打开文件时,差异将在读/写过程中处理,并转换为系统模式。在二进制模式下,字节按原样读取和写入,无需转换()


这取决于程序应该在哪里运行,以及哪些客户端应该读取输出(Linux/Windows)。当您的代码在linux上运行时,从linux读取文本文件并生成要在linux中使用的文本文件,请使用文本模式(同样适用于windows)。如果需要混合平台,您可能需要自己转换行尾。

这是一个文本,为什么要将其写入二进制文件(
“wb”
)?只需处理文本文件,一切都应该正常(在读取文件和写入文件时从文件打开模式中删除
b

您使用什么程序查看文件?您是否检查了其中的编码?在十六进制编辑器中查看结果文件。在“a”之后没有新行(CR-LF),“标准”文本文件以新行结尾。编码可以在记事本中给出,即它并不总是显示您希望它显示的内容。请参阅我对此主题的更新:/没有“EOF char”这样的东西。您可能指的是空字节(字符串终止符),是的,
strlen()
未将其包含在字符计数中。您可以查看strlen的文档是的,答案不正确,抱歉!。作为一名撰稿人,我在这里还是个新手。有什么办法可以删除我的答案吗?我应该吗?谢谢:)谢谢,但我认为你的新答案也不正确(你看到我的主题更新了吗?我不认为我使用什么编辑器来查看此文件有什么关系。两种情况下我都使用记事本:第一种没有给我想要的结果,第二种给了我想要的结果)@ÓscarGómezAlcañiz如果您有其他解决方案,可以单击答案下的
编辑
按钮对其进行修改。如果要完全删除,还应该有一个
delete
按钮。删除后,您仍然可以看到答案并对其进行编辑,但它将从“公众视线”中消失。例如,如果您想编辑答案而不收到否决票,这将非常有用。谢谢,我是从windows调试器创建的。我希望它能在Linux上工作。那么我应该在我的程序中更改什么呢?我通过以下方式将文件读入buf:fp=fopen(文件名“rb”);fread(buf,sizeof(char),BUFFER_SIZE,fp);我试图通过以下方式读取文件:fp=fopen(文件名为“r”);并通过以下方式将buf输入新文件:nem_file_name=fopen(文件名“w”);但是它不起作用。首先,我认为
fopen()
调用中的
b
对Linux没有影响(请参阅)。第二:从文件中读取
buf
的内容后,您能在Linux上打印它吗?例如,您可以通过以下方式执行此操作:
for(size_t i=0;buf[i];++i){std::cout
b
对Linux没有影响(请参见)。@FlorianSowade:OP显示了一个缓冲区,指示他在Windows上以二进制文件的形式读取文件