IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Строки, С++
sheka
сообщение 22.03.2010 21:59
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Подскажите, пожалуйста, как из строки удалить слово?

Пока реализовывал, понял из strcat, что char и const char разные типы (почему, что, где еще пока не понял). Решил обойти этот момент через указатели, но здесь меня вообще убило.

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main (){
char s[] ="The; first E36 M3, to be imported to the United States: was the 1995 model.";
char *p; //если закомментировать эту строку
char *n;
printf("%s\n",s);
//*n='\0'; и раскомментировать эту
printf("%s\n",n);

n=s;

printf("%s\n",n);
return 0;
}

получаются чудеса: в *n хранится часть строки s. Если не ошибаюсь, вот эта the 1995 model. Следственно закомментированая строка ее очищает. И, самое поразительное, что потом при n=s; в n сохраняется оставшаяся часть строки The; first E36 M3, to be imported to the United States: was.
Сможете объяснить такой феномен? lol.gif


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 22.03.2010 22:21
Сообщение #2


Гость






Цитата
получаются чудеса: в *n хранится часть строки s
Во-первых, в *n ничего не хранится. n указывает куда-то. Чувствуешь разницу? Второе: любой компилятор тебя предупредит, что переменная n не инициализирована (а стало быть может указывать куда угодно). Третье - и что тебе показывает тот код, который приведен? Мне оно говорит вот что:
The; first E36 M3, to be imported to the United States: was the 1995 model.

Process returned -1073741819 (0xC0000005) execution time : 3.734 s
Press any key to continue.


, попутно пытаясь послать отчет Биллу Гейтсу (при попытке распечатать строку, на которую указывает n).

Цитата
И, самое поразительное, что потом при n=s; в n сохраняется оставшаяся часть строки
Еще раз: в n ничего не сохраняется, кроме указателя на строку. Ты приравнял один указатель другому (а не одну строку другой). То, на что указывала s теперь скопировано и в n (n указывает туда же). И что ты удивляешься?
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.07.2025 13:16
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"