strncpy в C/C++: разбираемся с примерами
👋 Привет! В этой статье мы поговорим о функции strncpy
. С помощью этой функции мы можем копировать Си-строки из одного места в другое. Отличие этой функции от strcpy
заключается в том, что она копирует только первые n
байтов. В начале мы посмотрим на несколько примеров использования этой функции. В конце вы найдете упражнения для закрепления материала.
Как скопировать Си-строку с помощью strncpy
Функция strncpy
объявлена в заголовочном файле <string.h>
. В C++ вы может е использовать <cstring>
. Выглядит эта функция следующим образом:
char * strncpy ( char * destination, const char * source, size_t num );
- Первый аргумент - это указатель на строку, в которую будет производиться копирование.
- Второй аргумент - это строка, которую нам нужно скопировать.
- Третий аргумент указывает максимальное количество байтов, которые нужно скопировать (символ
\0
не влияет на этот лимит). - Функция возвращает указатель на скопированную строку
destination
(первый аргумент).
Функция будет копировать символы до тех пор, пока не встретит символ окончания строки \0
, или пока не скопирует num
байтов:
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "string";
char destination[4];
char* result = strncpy(destination, source, 3);
printf("%s, %s, %s", result, destination, source);
return 0;
}
Вывод этой программы:
str, str, string
Как видите, в результате мы получили "str"
в result
и destination
. Также хочу заметить, что строка destination
занимает не три, а четыре байта. strncpy
добавляет символ окончания строки \0
в конце. Для вывода строк на экран, мы используем функцию printf
.
Что произойдет, если num
в функции strncpy
больше длины исходной строки?
char src[] = "hello";
char dest[10];
strncpy(dest, src, 8);
printf("%s", dest);