C++ sprintf和连接字符串(c+;+;)

C++ sprintf和连接字符串(c+;+;),c++,C++,有没有具体的例子会给我带来问题?因为我有一个bug,我很确定就是因为这个 #define customStringDataType extern string char buffer[2024]; customStringDataType DATA; sprintf(buffer, "Some cool information"); DATA = DATA + buffer; 编辑:对不起,我还想说别的。我知道缓冲区溢出。因为我可以设置一个比信息长得多的大字符缓冲区,而我仍然有这个问题

有没有具体的例子会给我带来问题?因为我有一个bug,我很确定就是因为这个

#define customStringDataType extern string

char buffer[2024];
customStringDataType DATA;

sprintf(buffer, "Some cool information");
DATA = DATA + buffer; 
编辑:对不起,我还想说别的。我知道缓冲区溢出。因为我可以设置一个比信息长得多的大字符缓冲区,而我仍然有这个问题

有没有具体的例子会给我带来问题

如果复制到
缓冲区的字符串长度等于或大于
1024
,则会出现问题

您可以使用
snprintf
防止缓冲区溢出

sprintf(buffer, sizeof(buffer), "Some cool information");
现在还不清楚为什么要首先使用
sprintf
。如果
“一些很酷的信息”
应该包含格式化指令,并且对
sprintf
的调用中有更多的参数,那么您所尝试的是有意义的。如果
sprintf
没有其他参数,您只需使用:

DATA += "Some cool information";
使用
std::ostringstream
可以避免缓冲区大小限制问题

std::ostringstream ostr;
ostr << "Some cool information" << and other arguments as needed;
DATA += ostr.str();
std::ostringstream ostr;

每次“一些很酷的信息”使用的字节数超过缓冲区的大小时,ostr都会这样做。使用snprintf避免这种情况。请在问题中张贴您试图做的事情,闻起来像X-Y问题。从正确标记问题开始。不是,不是。不要为C++添加C标记。@ IcTestTable:OP明确地要求C++,所以C标签是错误的。(尽管我同意他应该补上他的mnd,改为问FOC。在那之前……)