Char a, b; //символьные переменные, занимают по одному байту,
// значения меняются
const char *s=“Пример строки\n”; //текстовая константа
Строка в Си – это массив символов, заканчивающийся нуль-символом – ‘\0’(нуль-терминатором). По положению нуль-терминатора определяется фактическая длина строки. Количество элементов в таком массиве на 1 больше, чем изображение строки.
Присвоить значение строке с помощью оператора присваивания нельзя. Поместить строку в массив можно либо при вводе, либо с помощью инициализации.
Пример:
Void main()
{
char s1[10]="string1";
int k=sizeof(s1);
cout<<s1<<"\t"<<k<<endl;
char s2[ ]="string2";
k=sizeof(s2);
cout<<s2<<"\t"<<k<<endl;
char s3[ ]={‘s’,’t’,’r’,’i’,’n’,’g’,’3’}
k=sizeof(s3);
cout<<s3<<"\t"<<k<<endl;
char *s4="string4";//указатель на строку, ее нельзя изменить
k=sizeof(s4);
cout<<s4<<"\t"<<k<<endl;
}
Результаты:
string1 10 – выделено 10 байтов, в том числе под \0
string2 8 – выделено 8 байтов (7 + 1 байт под \0)
string3 8 – выделено 8 байтов (7 + 1 байт под \0)
string4 4 – размер указателя
Примеры:
char *s=”String5”; //выделяется 8 байтов для строки
char*ss; //описан указатель
ss=”String6”; //память не выделяется, поэтому программа может //закончиться аварийно.
char *sss=new char[10]; //выделяем динамическую память
Strcpy(sss,”String7”); //копируем строку в память
Для ввода и вывода символьных данных в библиотеке языка Си определены следующие функции:
int getchar(void) – осуществляет ввод одного символа их входного потока, при этом она возвращает один байт информации (символ) в виде значения типа int. Это сделано для распознавания ситуации, когда при чтении будет достигнут конец файла.
int putchar (int c) – помещает в стандартный выходной поток символ c.
char* gets(char*s) – считывает строку s из стандартного потока до появления символа ‘\n’, сам символ ‘\n’ в строку не заносится.
int puts(const char* s) записывает строку в стандартный поток, добавляя в конец строки символ ‘\n’, в случае удачного завершения возвращает значение больше или равное 0 и отрицательное значение (EOF=-1) в случае ошибки.
Примеры:
char s[20];
cin>>s; //ввод строки из стандартного потока
cout<<s; //вывод строки в стандартный поток
Результат работы программы:
При вводе строки “123 456 789”, чтение байтов осуществляется до первого пробела, т. е. в строку s занесется только первое слово строки “123/0”, следовательно, выведется: 123.
char s[20];
Gets(s); //ввод строки из стандартного потока