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'
字符。