Ваш код в порядке.
Проблема в том, что если вы передадите строку, контролируемую пользователем, в виде строки формата printf, могут возникнуть ошибки безопасности.
Например, printf(userName);
Если userName предоставляется пользователем, пользователь может передать «% s» и заставить вашу функцию начать доступ к данным по случайному адресу в стеке, что может привести к сбою. printf попытается вытолкнуть дополнительные параметры из стека, что приведет к повреждению стека. Подобная атака типа «отказ в обслуживании», вероятно, является наилучшим случаем, информацию можно раскрыть, если заставить printf вывести значения в стек, и даже есть способы получить функции стиля printf для изменения адреса возврата в стеке.
Поскольку ваши строки не контролируются пользователем, это сообщение можно игнорировать. Типичное исправление заключается в замене примера printf, который я привел, на printf("%s", userName);
, который, по-видимому, не поможет в вашем случае, потому что строки const содержат строки формата.
В Википедии есть больше уязвимостей форматной строки здесь: http://en.wikipedia.org/wiki/Format_string_vulnerabilities