我在我的Visual Studio2008 C++项目中定义了一个资源文件。问题是,在使用LockResource方法获取资源数据之后,生成的字符缓冲区包含回车符和换行符,而原始数据只包含换行符。例如,如果原始行包含:
00 0A FC 80 00 00 27 10 00 0A FC 80 00 00 27 10
生成的char*还包含回车符(0D):
00 0D 0A FC 80 00 00 27 10 00 0D 0A FC 80 00 00
我尝试了下面的代码来去掉它们,但这会导致回车和换行符都被删除:
for (int i = 0; i < sz; ++i)
{
// Ignore carriage returns
if (data[i] == '\n') continue;
// ...
}如何删除回车符而保留换行符?
编辑:
说得更具体些。我正在将char缓冲区写入文件:
std::ofstream outputFile(fileName.c_str());
for (int i = 0; i < sz; ++i)
{
// Ignore carriage returns
// if (data[i] == '\r') continue; This leaves both CR and LF
// if (data[i] == 0x0D) continue; This leaves both CR and LF
if (data[i]) == '\n') continue; //This removes both CR and LF
outputFile << data[i];
}发布于 2011-05-11 20:35:40
当您将'\n‘写入文本文件时,它会转换为’行尾序列‘。在您的例子中,这看起来像'\r\n‘。当您从文本文件中读取时,‘行尾序列’被转换回单个'\n‘字符。因此,对于正常的处理,这个额外的字符应该不会影响您(假设您将读/写都作为文本文件打开)。
如果您不想将'\n‘转换为’行尾序列‘,则以二进制格式打开该文件。完成此操作后,不会对'\n‘字符进行任何处理。
std::ofstream outputFile(fileName.c_str(), std::ios::binary);
// ^^^^^^^^^^^^^^^^,但请注意:文件表示应该不会影响您。如果将文件作为文本打开并读取,则应用程序中的'\r\n‘将被转换回单个'\n’字符。
发布于 2011-05-11 20:12:00
下面是一个就地转换它的示例。变量i是正在读取的字符的索引,变量j是正在写入的字符的索引。当您经过回车时,i将开始“超越”j
#include <stdio.h>
int main(void)
{
char s[100] = "This is a test.\n\rThis is only a test.\n\r";
for(int i = 0, j = 0; s[i] != '\0'; i++)
if(s[i] != '\r')
s[j++] = s[i];
printf("%s", s);
}发布于 2011-05-11 20:09:51
在给定的代码中使用'\r'而不是'\n'?
https://stackoverflow.com/questions/5963941
复制相似问题