Как упомянуто в этом ответе , вы можете легко заменить использование 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");
приводит к неопределенному поведению.