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

时间:2015-12-11 17:34:25

标签: c++

是否存在会导致我出现问题的具体情况?因为我有一个错误,我很确定是因为这个

#define customStringDataType extern string

char buffer[2024];
customStringDataType DATA;

sprintf(buffer, "Some cool information");
DATA = DATA + buffer; 
编辑:对不起,我想说除此之外。我知道缓冲区溢出。因为我可以设置一个大的char缓冲区比它中的信息长得多,而且我还有问题

1 个答案:

答案 0 :(得分:1)

  

是否存在会导致我出现问题的具体情况?

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

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

sprintf(buffer, sizeof(buffer), "Some cool information");

目前尚不清楚为什么首先使用sprintf。如果"Some cool information"应该包含格式化指令,并且在sprintf的调用中有更多参数,那么您正在尝试的是有意义的。如果sprintf没有其他参数,您只需使用:

DATA += "Some cool information";

使用std::ostringstream可以避免缓冲区大小限制问题。

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