|
|
  |
c++ *указатель=*указатель |
|
|
|
Apr 12 2011, 14:39
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544

|
буду страшно благодарен коли кто знает подскажет... свои идеи кончились  есть 2 указателя на char. char *expression, *temp; нужно по очереди присваивать значения строки expression строке temp, если это не пробел. делаю так: while (*expression!='\0') { if (*expression!=' ') {*temp = *expression; temp++;} expression++; } компилятор съедает, а в винде вылазит ошибка, что temp используется до того как был проинициализирован.... как грамотно скопировать значение ячейки памяти через указатели???
|
|
|
|
|
Apr 12 2011, 15:26
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544

|
Цитата(rezident @ Apr 12 2011, 20:43)  А где у вас инициализация указателей явными значениями-то? В примере ни один из указателей не проинициализирован.  тот из которого переписываю (expression) указывает на строку. Цитата(Idle @ Apr 12 2011, 20:58)  Код ...
static void elx_scp(char *dst, const char *src) { while (*src) if ((*dst = *src++) != ' ') dst++; dst = '\0'; }
... } тот же результат: копирование символа происходит такой же операцией, то бишь *dst = *src++ Цитата(aaarrr @ Apr 12 2011, 20:44)  И правильно вылазит: temp - это указатель, начальное значение которого вы не определили. Присвоение "*temp =" посылает данные в неизвестность. хы... то есть всегда нужно память выделять temp = char new(80); ?
Сообщение отредактировал elusive - Apr 12 2011, 15:24
|
|
|
|
|
Apr 12 2011, 16:56
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(elusive @ Apr 12 2011, 20:18)  rezident, aaarrr, sergeeff, спасибо!! теперь запомню про инициализацию указателя.
все работает. я в общем сделал так:
char* temp_expression; temp_expression = new char(strlen(expression)); ... *(temp_expression+i) = *expression;
i соответственно наращиваю.
p.s. Idle, у вас совсем не "говорящее" имя =)
upd хм странно, работает только если символов <=16... upd лол какой-то... если добавить не играющее большой роли printf
str = new char(strlen(expression)); printf("%d\n", strlen(expression));
работает с любой длиной %))))) А это все от того, что полезно самому книжки читать, а не только на советы надеятся. Что делает Код char *pp = new char(80); выделяет 1 байт в куче и инициирует его значением 80. Вы ведь совсем другого хотели, не правда ли? Вам надо выделить область памяти длиной 80 байт. Тогда это так: Код char *pp = new char[80]; Потому и не работает.
|
|
|
|
|
Apr 13 2011, 02:49
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544

|
Цитата(sergeeff @ Apr 12 2011, 22:56)  А это все от того, что полезно самому книжки читать, а не только на советы надеятся. Что делает Код char *pp = new char(80); выделяет 1 байт в куче и инициирует его значением 80. Вы ведь совсем другого хотели, не правда ли? Вам надо выделить область памяти длиной 80 байт. Тогда это так: Код char *pp = new char[80]; Потому и не работает. да, да. полностью согласен. на счет скоб сам себя запутал. искренне балгодарен, sergeeff
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|