0

我使用 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 指针作为输入处理,可能是因为它本身有很大的分配?

编辑:

事实证明,缓冲区毕竟很小,至少对于某些参数而言。

4

1 回答 1

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());
于 2013-10-28T13:45:57.903 回答