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

Учебник по программированию на C для Linux, часть 9: Строки


В этой продолжающейся серии руководств по программированию на C мы уже затрагивали концепцию символьных массивов. С символьными массивами тесно связана концепция строк, которую мы будем здесь обсуждать.

Строка отличается от массива символов в одном важном аспекте — она заканчивается нулевым символом \0. В массиве символов такого завершающего символа нет. В следующем фрагменте кода показаны некоторые способы определения строки:

#include <stdio.h>

int main()
{
char str[] = "string";
char str1[] = {'s','t','r','i','n','g','\0'};
char str2[10] = "string";
char str3[10] = {'s','t','r','i','n','g','\0'};
char *str4 = "string";

printf("\n str=%s, str1=%s, str2=%s, str3=%s, and str4=%s", str, str1, str2, str3, str4);

return 0;
}

Таким образом, набор символов в двойных кавычках — это строка (завершающий символ Null здесь неявно), и ряд символов, явно заканчивающийся символом \0, также является строкой.

Вывод этой программы:

 str=string, str1=string, str2=string, str3=string, and str4=string

Имейте в виду, что вы не можете печатать нестроковые массивы символов таким образом, так как там нет завершающего нулевого символа, обозначающего конец массива. Вот кусок кода, который пытается это сделать:

#include <stdio.h>

int main()
{
char str[] = {'e','n','d'};
char c ='t';

printf("\n str=%s", str);

return 0;
}

Но вместо этого в конце печатаются значения мусора:

str=end??

Двигаясь дальше, точно так же, как спецификатор формата %s в Printf указывает компилятору обрабатывать входные переменные как строки, вы также можете использовать %s в функции scanf для приема строк в качестве входных данных от пользователя. Вот пример:

#include <stdio.h>

int main()
{
char str[30];

printf("\n Enter a string with length less than 30 characters: ");
scanf("%s",str);

printf("\n str=%s", str);

return 0;
}

Стоит отметить, что последовательность из нуля или более символов, заключенная в двойные кавычки, называется строковой константой или строковым литералом. Это означает, что как \howtoforge\, так и \\ являются строковыми константами или строковыми литералами.

Вы можете найти длину строки, используя стандартную функцию strlen(). Вот пример:

#include <stdio.h>

int main()
{
char str[] = "howtoforge";

printf("\n Length of string 'howtoforge' is: %d", strlen(str));

return 0;
}

Вывод, произведенный этой программой, равен 10, что точно соответствует количеству символов в howtoforge и, следовательно, его длине.

Двигаясь дальше, стоит помнить, что символ в одинарных кавычках (например, d) и символ в двойных кавычках (например, \d\) отличаются друг от друга. В то время как первая представляет собой символьную константу (которую можно использовать для получения числового значения символа в наборе символов машины), вторая представляет собой строку (что означает, что в ней есть завершающий символ \0).

Наконец, давайте быстро рассмотрим, как строки могут передаваться в качестве аргументов функций.

#include <stdio.h>

void change_value(char s[])
{
s[0] = 'H';
s[5] = 'F';

printf("%s", s);

}

int main()
{
char str[] = "howtoforge";

change_value(str);

return 0;
}

Таким образом, в приведенной выше программе имя массива str передается в качестве аргумента, поскольку оно ссылается на базовый адрес массива. Объявление функции change_value таково, что она ожидает массив в качестве входных данных. Вот вывод этой программы:

HowtoForge                                                                                                        

Итак, в этом уроке мы обсудили основы строк, в том числе то, как они определяются и как их можно использовать. Что ж, узнайте больше о строках в будущих руководствах, но этой статьи должно быть достаточно, чтобы вы начали. Дайте нам знать в комментариях ниже, если у вас есть какие-либо вопросы или сомнения, связанные со строками.