Предупреждение: вызов __builtin___strncat_chk может переполнить целевой буфер [включен по умолчанию] В функции ‘strncat’ - PullRequest
0 голосов
/ 04 января 2019

Я получаю эти предупреждения при компиляции языкового файла 'C'.

In function ‘strncat’,inlined from ‘O281DC3F563F92003x’ at util.c:817:13:
/usr/arm-linux-gnueabihf/include/bits/string3.h:152:3: warning: call to 
__builtin___strncat_chk might overflow destination buffer [enabled by 
default]

In function ‘strncat’,inlined from ‘UFE191C0002FB606Eb’ at util.c:3231:25:
/usr/arm-linux-gnueabihf/include/bits/string3.h:152:3: warning: call to 
__builtin___strncat_chk might overflow destination buffer [enabled by 
default]

In function ‘strncat’, 

Как я могу удалить эти предупреждения?

1 Ответ

0 голосов
/ 04 января 2019

Как упомянуто в этом ответе , вы можете легко заменить использование strncat на snprintf, которое принимает в качестве аргумента сайт буфера и делает его безопасным для использования.

strncat пример:

#define BUF_SIZE 32
char buf[BUF_SIZE];

strncpy(buf, "foo", sizeof(buf) -1);
strncat(buf, "bar", sizeof(buf) - strlen(buf) -1);

Безопаснее snprintf Пример:

#define BUF_SIZE 32
char buf[BUF_SIZE];

snprintf(buf, sizeof(buf), "%s%s", "foo", "bar");

Недостатком этого метода является то, что вы должны использовать промежуточный буфер, если вы действительно хотите объединить как:

snprintf(buf, sizeof(buf), "%s%s", buf, "bar");

приводит к неопределенному поведению.

...