ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1031502 Топик полностью
POV_ (27.08.2020 14:07, просмотров: 5) ответил fk0 на Я ж тебе выше разжевал: если в строке будут всякие %s, %d, и особенно %n -- получишь глюкодром. Поэтому QT и настаивает, что в его варианте глюкодром исключается.
Ничего разжёванного не вижу... 

так норм!


static const char str1[100] = "pov the best";
PRINT(str1);


так нет! и это правильно!


static const char str1[100] = "pov %d best";
PRINT(str1);

ибо "warning: more '%' conversions than data arguments"


Так что никакого "если в строке будут всякие" не надо тут, анализатор это всё видит.


Поэтому, если первый вариант норм, то чем отличается от него следующее:


typedef struct
{
    char str1[100];
} my_t;

static const my_t x =
{
    .str1 = "pov the best"
};

PRINT(x.str1);

"warning: format string is not a string literal (potentially insecure)"