double arrow

Return 1; // выход по ошибке, код ошибки 1


}

printf ("Введитестроку");

gets(s);

i = 0;

while ( s[i] != '\0' ) {

if ( s[i] >= '0' && s[i] <= '9' )

count ++;

}

printf("\nНашли %d цифр", count);

}

В этой программе использован тот факт, что коды цифр расположены в таблице символов последовательно от '0'до '9'. Поэтому можно использовать двойное неравенство, а не сравнивать текущий символ s[i]с каждой из цифр. Обратите внимание на разницу между символами

'\0'(символ с кодом 0, признак конца строки) и '0'(символ с кодом 48, цифра 0). Переменная

countработает как счетчик.

Копирование строк

Часто надо записать новое значение в строку или скопировать информацию из одной

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

В копировании участвуют две строки, они называются «источник» (строка, откудакопируется информация) и «приемник» (кудаона записывается или добавляется).

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

Простое копирование выполняет функция strcpy. Она принимает два аргумента: сначала

строка-приемник, потом – источник (порядок важен!).

char s1[50], s2[10];

gets(s1);

strcpy ( s2, s1); // s2 (приемник) <- s1 (источник)

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


Сейчас читают про: