В листинге 11.28 функция sprintf() применяется для объединения трех элементов (двух строк и числа) в одну строку. Обратите внимание, что sprintf() используется так же, как это бы делалось в случае функции printf(), кроме того, что результирующая строка сохраняется в массиве formal, а не отображается на экране.
Листинг 11.28. Программа format.с

460 Глава 11

Ниже показаны результаты пробного запуска:
Введите свое имя:
Остап
Введите свою фамилию:
Бендер
Введите сумму денежного приза:
25000
Бендер, Остап : $25000.00
Функция sprintf() принимает входные данные и форматирует его в стандартном виде, после чего сохраняет в строку formal.
Другие строковые функции
Библиотека ANSI С содержит более 20 функций, предназначенных для работы со строками, и далее приведены краткие описания наиболее часто применяемых из них.
• char *strcpy(char * restrict s1, const char * restrict s2);
Эта функция копирует строку (включая нулевой символ), указанную s2, в ячейку, на которую указывает s1. Возвращаемым значением является s1.
• char *strncpy (char * restrict s1, const char * restrict s2, size_t n); Эта функция копирует в ячейку, указанную s1, не более n символов из строки, на которую указывает s2. Возвращаемым значением является s1. Символы, следующие за нулевым символом, не копируются, и если исходная строка короче п
Символьные строки и строковые функции 461
символов, оставшаяся часть целевой строки заполняется нулевыми символами. Если исходная строка содержит n или больше символов, нулевой символ не копируется. Возвращаемым значением является s1.
• char *strcat(char * restrict s1, const char * restrict s2);
Строка, указанная s2, копируется в конец строки, на которую указывает s1. Первый символ строки s2 копируется поверх нулевого символа строки s1. Возвращаемым значением является s1.
• char *strncat(char * restrict s1, const char * restrict s2, size_t n);
К строке s1 добавляется не более n символов строки s2, причем первый символ строки s2 копируется поверх нулевого символа строки s1. Нулевой символ и любые другие символы, которые за ним следуют в строке s2, не копируются, а к результату добавляется нулевой символ. Возвращаемым значением является s1.
• int strcmp (const char * s1, const char * s2);
Эта функция возвращает положительное значение, если в последовательности сопоставления машины строка s1 следует за строкой s2, значение 0, если строки идентичны, и отрицательное значение, если в последовательности сопоставления первая строка предшествует второй.
• int strncmp (const char * s1, const char * s2, size_t n);
Эта функция работает подобно strcmp(), за исключением того, что процедура сравнения останавливается после просмотра n символов либо при появлении первого нулевого символа, в зависимости от того, что произойдет раньше.
• char *strchr (const char * s, int c);
Эта функция возвращает указатель на первую ячейку строки s, в которой содержится символ с. (Завершающий нулевой символ является частью строки, так что его тоже можно искать.) Если символ не найден, функция возвращает нулевой указатель.
• char *strpbrk (const char * s1, const char * s2);
Эта функция возвращает указатель на первую ячейку строки s1, в которой содержится любой символ, найденный в строке s2. Эта функция возвращает нулевой указатель, если ни одного символа не найдено.
• char *strrchr (const char * s, int c);
Эта функция возвращает указатель на последнее вхождение символа с в строке s. (Завершающий нулевой символ является частью строки, так что его тоже можно искать.) Если символ не найден, функция возвращает нулевой указатель.
• char *strstr (const char * s1, const char * s2);
Эта функция возвращает указатель на первое вхождение строки s2 внутри строки s1. Если строка не найдена, функция возвращает нулевой указатель.
• size_t strlen (const char * s);
Эта функция возвращает количество символов, не включая нулевой, находящихся в строке s.
Обратите внимание, что во всех прототипах используется ключевое слово const, чтобы отразить, какие строки нс изменяются функцией. Например, взгляните на следующий прототип:
char *strcpy(char * restrict s1, const char * restrict s2);
462 глава 11
Это означает, что s2 указывает на строку, которая не может быть изменена, во всяком случае, функцией strcpy(), но s1 указывает на строку, изменять которую разрешено. В этом есть смысл, т.к. s1 — целевая строка, подвергающаяся изменениям, а s2 — исходная строка, которая должна оставаться неизменной.
Читать дальше