Руководство полного чайника по программированию на языке Си


СТРОКИ


Строки есть массивы БУКВ - типа char, оканчивающиеся спецсимволом \0

char string[20];

string[0] = 'П'; string[1] = 'р'; string[2] = 'и'; string[3] = 'в'; string[4] = 'е'; string[5] = 'т'; string[6] = '\0';

printf("%s\n", string);

%s - формат для печати СТРОК. Никакие другие массивы не могут быть напечатаны целиком одним оператором.

char string[20];

string[0] = 'П'; string[1] = 'р'; string[2] = 'и'; string[3] = 'в'; string[4] = 'е'; string[5] = 'т'; string[6] = '\n'; /* Перевод строки - тоже буква */ string[7] = '\0';

printf("%s", string);

или даже просто

printf(string);

Такие массивы можно записать в виде строки букв в ""

char string[20] = "Привет\n";

Оставшиеся неиспользованными символы массива от string[8] до string[19] содержат МУСОР.

ПОЧЕМУ ДЛЯ СТРОК ИЗОБРЕЛИ СИМВОЛ "ПРИЗНАК КОНЦА"? ================================================= Строка - это ЧАСТЬ массива букв. В разное время число букв в строке может быть различным, лишь бы не превышало размер массива (тогда случится сбой программы). Значит, следует где-то хранить текущую длину строки (число использованных символов). Есть три решения: (1) В отдельной переменной. Ее следует передавать во все функции обработки данной строки (причем она может изменяться).

char str[32]; /* массив для строки */ int slen; /* брать первые slen букв в этом массиве */ ... func(str, &slen); /* ДВА аргумента для передачи ОДНОЙ строки */ ...

Этот подход работоспособен, но строка разбивается на два объекта: сам массив и переменную для его длины. Неудобно.

(2) Хранить текущую длину в элементе str[0], а буквы - в str[1] ... итд. Плохо тем, что в str[0] можно хранить лишь числа от 0 до 255, и если строка длиннее - то такой подход неприменим.

(3) Не хранить длину НИГДЕ, а ввести символ-признак конца строки. Теперь в

func(str); /* ОДИН аргумент - сам массив */

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




- Начало -  - Назад -  - Вперед -