|
|||
Пример 2.. gets(str);. Присваивание строк. Пример 3.. Пример 4.. str2=str1;Пример 2. #include <iostream.h> int _tmain(intargc, _TCHAR* argv[]) { SetConsoleCP(1251); SetConsoleOutputCP(1251); cout<<"Введитестроку"<<endl; char*str; //объявляется через указатель gets(str); cout<<"Результат: "<<str<<endl; system("pause"); return 0; }
Присваивание строк Не зная о правильных способах, начинающие программисты часто «выдумывают» свои способы присваивания строк, конечно, неправильные. Приведу несколько примеров: Пример 3. charstr1[10]="Привет", str2[10]; str2=str1; Ошибка в том, что имя массива нельзя использовать в левой части оператора присваивания. Эта ошибка относительно безопасна, так как приводит к сбою на этапе компиляции. Есть и гораздо более опасная ошибка:
Пример 4. intmain() { char str1[8]="Привет", *str2; cout<<"Строка 1: "<<str1<<endl; str2=str1; cout<<"Строка 2: "<<str2<<endl; cout<<"Измените строку 2: "; gets(str2); cout<<"В результате изменится и первая и вторая:"<<endl; cout<<"Строка 1: "<<str1<<endl; cout<<"Строка 2: "<<str2<<endl; //cout<<"str[1]= "<<str[0]<<endl; return 0; }
Этот код откомпилируется, но, возможно, содержит «идеологическую» ошибку. Неправильно полагать, что в str2 теперь содержится копия str1. На самом деле этот указатель указывает не на копию, а на ту же самую строку. При любом изменении содержимого str2 изменяется str1. Однако, если именно это и требуется, то все в порядке. Следующий пример копирует содержание первой строки во вторую без изменения первой, используя цикл.
|
|||
|