windowsapi richtextbox在c++中添加了额外的换行符
windows api richtextbox adding extra linebreak in c++
我正在c++windows api 中制作一个十六进制编辑器
我有一个丰富的文本框,我可以很好地阅读文件。问题是,当我写回文件时,richtextbox会添加某种换行符或其他字符,这样文件就不会输出相同的内容。我使用消息框来查看特殊字符是什么,它似乎是某种换行符,因为它会在消息框中显示我的十六进制字节,然后在插入特殊字符的部分,它会在稍高的消息框中展示我的十六十六进制字节。大约6个月前,我在一个汇编程序中遇到了这个问题,并通过删除所有十六进制字节"13"来解决它,因为它们在汇编中没有"\n"。所以我试着删除"\n",但没有成功,我还试着删除了"\t"、"\f"、"\r"、"\n\r"、"\r\n",但这些都没有删除。这是我用来尝试删除特殊字符的代码(我在堆栈溢出时发现了它,看起来它很有效,所以我不认为这是代码的错误)
str.erase(std::remove(str.begin(), str.end(), 'n'), str.end());
我甚至试着写一个函数,如果你找到任何"\n"、"\t"、"\f"、"\r"、"\n\r"、"\r\n"消息框,它会给我发消息,但它从来没有给我发过消息,所以它是其他特殊的字符。
所以有人能帮我弄清楚这个特殊字符是什么吗?这样我就可以把它去掉了
感谢
这里的更新是如何从windows中的richtextbox中删除换行符
您必须删除'\r\n'和'\n',所以下面是将richtextbox的内容读取为字符串并删除换行符的代码
textboxlength = GetWindowTextLength(hwndtextbox1);
GetWindowText(hwndtextbox1, buffert, textboxlength);
buffer4 = buffert;
buffer4.erase(std::remove(buffer4.begin(), buffer4.end(), L'rn'), buffer4.end());
buffer4.erase(std::remove(buffer4.begin(), buffer4.end(), L'n'), buffer4.end());
textboxlength是LONGLONG,buffert是TCHAR,buffer4是wstring
Windows使用CR+LF
作为标准换行标记,也就是说,两个单独的字符在一起-ASCII 13
后面跟着ASCII 10
。一个或另一个本身通常不会被认为是断线。
编辑:下面是一个从std::string
:中删除CR+LF
的示例函数
std::string RemoveLinebreak(std::string input)
{
const std::string newline("rn");
size_t pos = 0;
while((pos = input.find(newline, pos)) != std::string::npos) {
input.erase(pos, newline.length());
}
return input;
}
对于wchar'\n'是L'\n'并且'\n'为L'\n'
所以基本上你应该使用
std::wstring str
str.erase(std::remove(str.begin(), str.end(), 'Ln'), str.end());
或
std::wstring str;
int pos;
pos=str.find_first_of(Text("nr"));
if(pos!=std::wstring::nops)str.erase(pos,pos+1);
- 如何防止clang格式在流运算符调用之间添加换行符<<
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 在 Stream C++ 文本之前有一个额外的换行符
- 流:CSV 文件中的换行符
- 如何在三元条件运算符中添加换行符和连接? :在 C++ 中
- Clang-格式:在多行语句之后的换行符上打开大括号
- 在输出流中插入换行符
- 防止控制台在通道字符(在 c++ 中)中输入空格(即空格、制表符和换行符)
- QProcess::readAllStandardOutput() 和换行符
- 如果有换行符,clang 格式不会附加大括号
- 使用解脱脱在 if-else 块之后添加换行符
- 为什么 std::cout 在我的输出中添加返回或换行符
- 如何在不添加换行符的情况下将文本附加到QPlainTextEdit,并保持滚动在底部
- 编写一个简单的函数,其工作方式与"std::cout"类似,但在末尾添加换行符
- windowsapi richtextbox在c++中添加了额外的换行符
- 在 std::string 中每设置一个字母量添加一个换行符
- 为什么Qt Creator在cout.flush()调用后添加一个换行符
- 向字符串添加换行符
- 如何在写入文本文件时向一行添加换行符
- 如何在不C++中添加换行符的情况下从控制台读取整数