Здавалка
Главная | Обратная связь

Работа со строками в С. Примеры.



Предыдущая тема урока была посвящена строковым функциям, эта тема посвящается работе с ними.

Определение длины строк.

Длина строки определяется просто. Для этого нужно передать строковый указатель функции strlen(), которая возвратит длину строки, выраженную в символах. После объявления

char *с = "Any old string....";int len;

следующий оператор установит переменную len равной длине строки, адресуемой указателем с:

len = strlen(с);

пример использования функции strlen().

#include <stdio.h>#include <string.h>#include <iostream>using namespace std;const int MAXLEN=256;void main(){ char string[MAXLEN]; /* Место для 255 символов. */ cout << "Input string:: "; gets(string); cout <<"\n";/* Начать новую строку. */ cout << "String: " << string << "\n"; cout << "Length = " << strlen(string);}

Здесь определяется строковая переменная с именем string для приема ввода от функции gets(). После того как вы введете строку, программа передаст переменную string функции strlen(), которая вычислит длину строки в символах.

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

char buffer[128] = "Copy in buffer";

Затем используйте функцию strlen() для установки целой переменной len, равной числу символов в литеральной строке, скопированной в буфер:

int len; /* Определить целую переменную. */len = strlen(buffer); /* Вычислить длину строки. */

Копирование строк.

Оператор присваивания для строк не определен. Если с1 и с2 - символьные массивы, вы не сможете скопировать один в другой следующим образом:

с1 = с2; //???

Но если с1 и с2 объявить как указатели типа char *, компилятор согласится с этим оператором, но вряд ли вы получите ожидаемый результат. Вместо копирования символов из одной строки в другую оператор с1 = с2 скопирует указатель с2 в указатель с1, перезаписав, таким образом, адрес в с1, потенциально потеряв информацию, адресуемую указателем.

char*с1 = new char [10];char*с2 = new char [10];c1=c2;// память выделенная под с1 - потерялась

Чтобы скопировать одну строку в другую, вместо использования оператора присваивания вызовите функцию копирования строк strcpy(). Для двух указателей с1 и с2 типа char * оператор

strcpy(с1, с2);

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

Аналогичная функция strncpy() ограничивает количество копируемых символов. Если источник (source) и приемник (destination) являются указателями типа char * или символьными массивами, то оператор

strncpy(destination, source, 10);

скопирует до 10 символов из строки, адресуемой указателем source, в область памяти, адресуемую указателем destination. Если строка source имеет больше 10 символов, то результат усекается. Если же меньше - неиспользуемые байты результата устанавливаются равными нулю.

Примечание:Строковые функции, в имени которых содержится дополнительная буква n, объявляют числовой параметр, ограничивающий некоторым образом действие функции. Эти функции безопаснее, но медленнее, чем их аналоги, не содержащие букву n. Программные примеры содержат следующие пары функций: strcpy() и strncpy(), strcat() и strncat(), strcmp() и strncmp().







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.