Как решить gcc [-Werror = format-security] в вызове функции? - PullRequest
0 голосов
/ 01 марта 2019

У меня есть этот вызов к czmq api:

int rc = zsock_connect(updates, ("inproc://" + uuidStr).c_str());
(Note: uuidStr is of type std::string and zsock_connect expects a const char* as its second argument)

, который выдает ошибку компилятора:

error: format not a string literal and no format arguments [-Werror=format-security]
int rc = zsock_connect(updates, ("inproc://" + uuidStr).c_str());
                                                               ^                                                                                                    

Я пробовал:

const char* connectTo = ("inproc://" + uuidStr).c_str();
int rc = zsock_connect(updates, connectTo);

, а также

int rc = zsock_connect(updates, (const char*)("inproc://" + 
uuidStr).c_str());

Но ошибка сохраняется.

Как мне исправить это?

Context;Я пытаюсь скомпилировать этот код как расширение Python для Linux с помощью установки pip.В Windows он компилируется с установкой pip и работает нормально, предположительно, этот компилятор более разрешительный.

1 Ответ

0 голосов
/ 01 марта 2019

Эта функция действует как printf() и друзья, верно?Если это так, то у вас та же проблема, что и в printf(some_var) - если передаваемая вами строка содержит последовательности форматирования, вы получите неопределенное поведение и плохие вещи, потому что нет никаких аргументов, которые выговоря функции ожидать.Исправление заключается в том, чтобы сделать что-то вроде:

int rc = zsock_connnect(updates, "inproc://%s", uuidStr.c_str());

По сути, укажите формат, который принимает вашу строку в качестве аргумента.

...