使用sprintf分配给char数组时,缓冲区溢出,其中char指针作为输入之一

时间:2013-10-28 13:41:18

标签: c++ printf arrays char-pointer

我使用sprintf创建一个char数组,以后可以将其写为对系统的调用。

char buffer[80];
char *ip = inet_ntoa(sa.sin_addr);
short port = 1;
sprintf(buffer, "Command with IP %s and port %d",ip, port);
system(buffer);

现在理论上这个缓冲区应该有足够的空间分配给这个字符串。但不知何故,由于char指针,我仍然得到* stack smashing detected *作为错误。

sprintf不能将char指针作为输入处理,也许是因为它本身有一个大的分配?

编辑:

事实证明,缓冲区毕竟是小的,至少对于某些争论而言。

1 个答案:

答案 0 :(得分:4)

由于你有C ++标记,而不是C,你的代码最好写成:

std::string ip = "0.0.0.0";
int port = 1;
std::ostringstream oss;
oss << "Command with IP:  " << ip << " and port " << port;
system(oss.str().c_str());