Объединить две строки в одну строку.
Прототипы
#include <string.h>
char * strcat(char *restrict s1, const char *restrict s2);
char * strncat(char *restrict s1, const char *restrict s2, size_t n);
ОПИСАНИЕ
Функции strcat()
и strncat()
добавляют копию с нулевым символом в конце
строка s2 до конца строки s1 с нулевым символом в конце, затем добавьте завершающий символ \ 0 '. Строка s1 должна иметь достаточно места для хранения
результат.
Функция strncat () добавляет не более n символов из s2, и
затем добавляет завершающий \ 0 '.
Исходная и целевая строки не должны перекрываться, так как поведение
не определено.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
The `strcat()` and `strncat()` functions return the pointer s1.
СООБРАЖЕНИЯ БЕЗОПАСНОСТИ
Функцией strcat()
легко злоупотреблять, что позволяет злонамеренным пользователям произвольно изменять функциональность работающей программы.
через атаку переполнения буфера.
Избегайте использования strcat()
. Вместо этого используйте strncat()
или strlcat()
и убедитесь, что
что в буфер назначения копируется не больше символов, чем может
держать.
Обратите внимание, что strncat()
также может быть проблематичным. Это может быть проблемой безопасности для строки, которая будет обрезана вообще. Поскольку усеченная строка
будет не таким длинным, как оригинал, это может относиться к совершенно другому ресурсу, и использование усеченного ресурса может привести к очень
неправильное поведение Пример: * * тысяча сорок восемь
void
foo(const char *arbitrary_string)
{
char onstack[8] = "";
#if defined(BAD)
/*
* This first strcat is bad behavior. Do not use strcat!
*/
(void)strcat(onstack, arbitrary_string); /* BAD! */
#elif defined(BETTER)
/*
* The following two lines demonstrate better use of
* strncat().
*/
(void)strncat(onstack, arbitrary_string,
sizeof(onstack) - strlen(onstack) - 1);
#elif defined(BEST)
/*
* These lines are even more robust due to testing for
* truncation.
*/
if (strlen(arbitrary_string) + 1 >
sizeof(onstack) - strlen(onstack))
err(1, "onstack would be truncated");
(void)strncat(onstack, arbitrary_string,
sizeof(onstack) - strlen(onstack) - 1);
#endif
}
* ** 1052 тысяча пятьдесят один * * Пример 1 053 *
char dest[20] = "Hello";
char *src = ", World!";
char numbers[] = "12345678";
printf("dest before strcat: \"%s\"\n", dest); // "Hello"
strcat(dest, src);
printf("dest after strcat: \"%s\"\n", dest); // "Hello, World!"
strncat(dest, numbers, 3); // strcat first 3 chars of numbers
printf("dest after strncat: \"%s\"\n", dest); // "Hello, World!123"