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);