Puts ( s2 );

Этот фрагмент программы является «опасным» с точки зрения выхода за границы строки. В строку s1можно безопасно записать не более 49 символов (плюс завершающий ноль). Поэтому если с клавиатуры будет введена строка длиннее 49 символов, при записи ее в память произой-

дет выход за границы строки s1. Строка s2может принять не более 9 символов, поэтому при

большем размере s1произойдет выход за границы строки s2.

Поскольку реально функции передается адрес начала строки, можно заставить функцию

начать работу любого символа, а не только с начала строки. Например, следующая строка ско-

пирует строку s2в область памяти строки s1,которая начинается с ее 6-ого символа, оставив

без изменения первые пять:

strcpy ( s1+5, s2 );

При этом надо следить, чтобы не выйти за границу массива. Кроме того, если до выполнения

этой операции в строке s1меньше 5 символов, фокус не удастся.

Еще одна функция позволяет скопировать только заданное количество символов, она на-

зывается strncpyи принимает в третьем параметре количество символов, которые надо ско-

пировать. Важно помнить, что эта функция НЕ записывает завершающий нуль, а только ко-

пирует символы (в отличие от нее strcpyвсегда копирует завершающий нуль). Функция

strncpyособенно полезна тогда, когда надо по частям собрать строку из кусочков.

#include <stdio.h>

#include <string.h>

Main()

{

char s1[] = "Ку-ку", s2[10];

strncpy ( s2, s1, 2 ); // скопировать 2 символа из s1 в s2

puts ( s2 ); // ошибка! нет последнего '\0'

s2[2] = '\0'; // добавляем символ окончания строки

puts (s2); // вывод

}








Дата добавления: 2015-10-05; просмотров: 474;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.