Как стирать строки в си
Объявление строк
Строка в языке Си представляет собой одномерный массив символов, последним элементом которой является символ конца строки – нуль (строка, завершающаяся нулем, то есть NULL terminated string).
Объявление переменной типа строка в языке Си возможно тремя способами, два из которых инициализируют строку во время объявления.
Первый способ:
Объявления массива символов (не забудьте добавить место для завершающего нуля):
char s[40+1];
Второй способ:
Присвоить строковой переменной начальное значение (при этом длину строки компилятор может вычислить сам):
char s[] = «Пример инициализации строки»;
Справа от знака присваивания записана строковая константа. В конце строки автоматически добавляется ноль (‘ ’). Константы символьных строк помещаются в класс статической памяти.
Третий способ:
Неявное указание, что используется массив. В левой части от знака присваивания указывается указатель на символ:
char *s=»Второй вариант инициализации»;
Переменная s будет указателем на то место в оперативной памяти, где располагается строковая константа. В такой форме записи кроется потенциальная ошибка, заключающаяся в том, что указатель на символ часто называют строкой. Представленная ниже запись – это только указатель на символ, так как для размещения строки место не предусмотрено:
char *s;
Ввод строки со стандартного устройства ввода (клавиатуры)
Для работы со строками есть набор функций. Для ввода со стандартного устройства ввода (клавиатуры) чаще всего используются библиотечные функциями из модуля стандартного ввода-вывода: scanf и gets.
Для ввода строки с помощью функции scanf, использует формат «%s», причем обратите внимание на то, что перед идентификатором строки не используется знак адреса «&», так как одномерный массив уже представлен указателем на его начало:
scanf(«%s», s);
Функция gets() считывает символы до тех пор, пока не достигнет символа перехода на новую строку. Функция принимает все символы вплоть до символа перевода строки, но не включает его. К концу строки добавляется завершающий ноль (‘ ’). Функция gets() помещает считанную с клавиатуры последовательность символов в параметр типа строка и возвращает указатель на эту строку (если операция завершилась успешно), или NULL (в случае ошибки). В приведенном ниже примере при успешном завершении операции, на экран будет выведено две одинаковые строки:
#include <stdio.h>
int main()
{ char s[50];
char *p;
p=gets(s);
printf(» n Введена строка %s. «,s);
if (p) printf(» n Введена строка %s. «,p);
return 0;
}
Попутно заметим, что функция gets часто используется для ввода лю-бых данных с клавиатуры в виде строки с целью дальнейшего преобразования функцией sscanf к нужному формату или для предварительного анализа вводимых данных, например:
#include <string.h>
#include <stdio.h>
#include <conio.h>
int main()
{ char s[50]; int x, err;
do
{ printf(» n Введите целое число -> «);
gets(s);
err=sscanf(s, «%d»,&x);
if (err!=1) printf(» n Ошибка ввода. «);
} while (err!=1);
printf(«n Введено целое число -> %d», x);
return 0;
}
Вывод строк на стандартное устройство вывода (экран монитора)
Для вывода строк на стандартное устройство вывода (экран монитора) можно использовать две функции printf и puts. В функции printf в качестве формата передается «%s». Удобство использования этой функции заключается в том, что помимо строки можно сразу выводит данные других типов. Особенность функции puts заключается в том, что после вывода строки автоматически происходит переход на следующую строку.
Функции для работы со строками
Для преобразования строк в языке Си предусмотрена библиотека string. Каждая из функций имеет свой формат записи (прототип).
Наиболее используемые функции рассмотрены в этой статье. — читать
Пример программ(листинг) работающей со строками
Пример №1(листинг) | Пример№2 (Листинг)
Хабра, привет!
Не так давно у со мной произошел довольно-таки интересный инцидент, в котором был замешан один из преподавателей одного колледжа информатики.
Разговор о программировании под Linux медленно перешел к тому, что этот человек стал утверждать, что сложность системного программирования на самом деле сильно преувеличена. Что язык Си прост как спичка, собственно как и ядро Linux (с его слов).
У меня был с собой ноутбук с Linux, на котором присутствовал джентльменский набор утилит для разработки на языке Си (gcc, vim, make, valgrind, gdb). Я уже не помню, какую цель мы тогда перед собой поставили, но через пару минут мой оппонент оказался за этим ноутбуком, полностью готовый решать задачу.
И буквально на первых же строках он допустил серьезную ошибку при аллоцировании памяти под… строку.
char *str = (char *)malloc(sizeof(char) * strlen(buffer));
buffer — стековая переменная, в которую заносились данные с клавиатуры.
Я думаю, определенно найдутся люди, которые спросят: «Разве что-то тут может быть не так?».
Поверьте, может.
А что именно — читайте по катом.
Немного теории — своеобразный ЛикБез.
Если знаете — листайте до следующего хэдера.
Строка в C — это массив символов, который по-хорошему всегда должен заканчиваться ‘