Переполнение буфера при использовании sprintf для присваивания массиву char с указателем char в качестве одного из входных данных

Я использую 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);

Теперь теоретически в этом буфере должно быть достаточно места для этой строки. Но почему-то из-за указателя на символ я все еще получаю * stack smashing detected * как ошибка.

Не может ли sprintf обработать указатель на символ как входной, возможно, потому что он сам имеет большое распределение?

РЕДАКТИРОВАТЬ:

Оказывается, что буфер был маленьким, по крайней мере, для некоторых аргументов.

0

Решение

Поскольку у вас есть теги 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());
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]