Наиболее типичным представителем одномерного массива являются строки. Хотя С не определяет строкового типа, имеется поддержка строковых операций с помощью функций, имеющихся в любом языке. В С строка определяется как символьный массив произвольной длины, оканчивающийся нулевым символом. Нулевой символ определяется как '\0'. Поэтому необходимо объявлять символьные массивы на один символ больше, чем требуется для хранения самой длинной строки. Например, если необходимо объявить массив s, содержащий десятисимвольную строку, следует написать:
char s[11];
В результате этого выделяется место в конце строки для нулевого символа.
Не надо добавлять нулевой символ в конец строковой константы, поскольку компилятор С выполняет это автоматически.
С поддерживает множество функций для работы со строками. Наиболее типичными являются strcpy(), strcat(), strlen(), strcmp() со следующими прототипами:
char *strcpy(char *s1, const char *s2);
char *strcat(char *s1, const char *s2);
size_t strlen(const char *s1);
int strcmp(const char *s1, const char *s2);
Все функции используют заголовочный файл string.h. Функция strcpy() копирует строку, на которую указывает s2, в строку на которую указывает s1. Функция возвращает s1. Функция strcat() выполняет конкатенацию строки, на которую указывает s1, и строки на которую указывает s2. Она также возвращает s1. Функция strlen() возвращает длину строки, на которую указывает s1. Тип данных size_t определён стандартом для адресов и в настоящее время для большинства машин определяется как беззнаковое длинное целое. Функция strcmp() сравнивает строки s1 и s2. Она возвращает 0, если две строки эквивалентны, значение меньше 0, если строка s1 при лексикографическом порядке идет раньше s2 и значение больше 0, если строка s1 при лексикографическом порядке идет после s2.
Следующая программа демонстрирует использование данных строковых функций:
#include <string.h>
#include <stdio.h>
int main()
{
char s1[80], s2[80];
gets(s1); gets(s2);
printf(“lengths: %d %d\n“, strlen(s1), strlen(s2));
if(!strcmp(s1, s2)) printf(“The strings are equal\n”);
strcat(s1, s2);
printf(“%s\n”, s1);
return 0;
}
Если при запуске программы ввести строки “hello” и “hello”, в результате получится:
lengths: 5 5
The strings are equal
hellohello
Для многих компиляторов существуют безопасные версии функций strcpy() и strcat() - это strcpy_s() и strcat_s(). Чтобы ими полноценно пользоваться необходимо подключить <string.h> и <errno.h>.
errno_t strcpy_s(char *strDestination, size_t sizeInBytes, const char *strSource );
errno_t strcat_s(char *strDestination, size_t sizeInBytes, const char *strSource);
Вторым параметром в этих функциях идет максимальная длина целевой строки. Функции возвращают значение ноль, если параметры корректны и не ноль, если в параметрах содержится ошибка.