Учебник по программированию на 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
Итак, в этом уроке мы обсудили основы строк, в том числе то, как они определяются и как их можно использовать. Что ж, узнайте больше о строках в будущих руководствах, но этой статьи должно быть достаточно, чтобы вы начали. Дайте нам знать в комментариях ниже, если у вас есть какие-либо вопросы или сомнения, связанные со строками.