C++ 将缓冲区复制到剪贴板[新行错误]
我想知道,如何将C++ 将缓冲区复制到剪贴板[新行错误],c++,winapi,buffer,clipboard,copy-paste,C++,Winapi,Buffer,Clipboard,Copy Paste,我想知道,如何将char*缓冲区复制到Windows剪贴板,并获得正确/想要的输出,如下图所示 例如: 我有一个char*缓冲区,我把它放进: Text\nText text \ntext 我们希望,当我们将其复制到剪贴板并粘贴到文档中时,结果会是这样: Text Text text text TextText text text clipBoard(buffer); 但当我尝试复制并粘贴它时,结果如下: Text Text text text TextText text text
char*
缓冲区复制到Windows剪贴板,并获得正确/想要的输出,如下图所示
例如:
我有一个char*
缓冲区,我把它放进:
Text\nText text \ntext
我们希望,当我们将其复制到剪贴板并粘贴到文档中时,结果会是这样:
Text
Text text
text
TextText text text
clipBoard(buffer);
但当我尝试复制并粘贴它时,结果如下:
Text
Text text
text
TextText text text
clipBoard(buffer);
那么,我该怎么做才能得到我想要的结果呢
以下是我正在使用的函数:
void clipBoard(const char* output)
{
const size_t len = strlen(output) + 1;
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, len);
memcpy(GlobalLock(hMem), output, len);
GlobalUnlock(hMem);
OpenClipboard(0);
EmptyClipboard();
SetClipboardData(CF_TEXT, hMem);
CloseClipboard();
}
这样称呼:
Text
Text text
text
TextText text text
clipBoard(buffer);
根据文件:
CF_TEXT一, 文本格式每行以回车/换行(CR-LF)组合结束。空字符表示数据结束。对ANSI文本使用此格式 CF_unicodext
十三, Unicode文本格式每行以回车/换行(CR-LF)组合结束。空字符表示数据结束 因此,您需要用CRLF(
\r\n
)序列替换所有裸LF(\n
)字符
Text\r\nText text \r\ntext
如何以及在何处“粘贴”文本?请记住,在Windows上,标准换行符是
“\r\n”
。显示如何设置缓冲区。执行此操作时,您将得到相同的结果<代码>字符*缓冲区/*或字符串。取决于您想叫它什么*/=“Text\nText Text\nText”代码>(基本上我是怎么做的,只是当某个东西花费(这很重要)时,它是一个日志,而不是这个剪贴板(缓冲区)
正如@Someprogrammerdude所说,可能的问题是文本的接收者希望换行符被编码为\r\n(CRLF),而不仅仅是\n(LF),所以试着将其放入缓冲区,看看会得到什么结果。@gofmode将单个'\n'
字符替换为“\r\n”
字符串不会替换“\\n”
字符串,其中包含独立的'\'
和'n'
字符,而不是'\n'
字符。除非您想到的是“\\\n”
,它包含'\'
和'\n'
字符。