![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
как из функции получить строку , если вызов не прямой?
т.е. делаю так: char *a = new char[10]; func(a); func(char * b&){ c = b; c = "d"; //хотелось бы изменив c изменить a //т.е. получить a == "d"; } Заранее благодарю за ответ. -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: нет Всего: 64 |
Если я тебя правильно понял, то так:
Это сообщение отредактировал(а) <Spawn> - 7.1.2004, 08:00 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
char *a = new char[10];
f(char *&b) { ... } Это сообщение отредактировал(а) bel_nikita - 7.1.2004, 10:29 |
|||
|
||||
setq |
|
|||
Unregistered |
код в 1м сообщении очень похож на си++... но чего-то не хватает
|
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
to setq классов там не хватает
![]() -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
to <Spawn>
вернет строку (или массив символов), которая существует только в теле функции и, по идее, нигде более (т.е. вне функции указатель на 'd' потеряет валидность, т.к. строка как и все локальные переменные и непосредственные данные, размещена в стеке). Тут правильнее делать strcpy(c, "d"); Это сообщение отредактировал(а) mr.DUDA - 7.1.2004, 22:16 -------------------- ![]() |
|||
|
||||
Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Нет, ну я не знаю конечно, но ведь вполне нормально работает...
В func изменяется сама строка - обращение-то по адресу. Или я неправ? |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Прав. И в функции изменяется текст непосредственно по переданному адресу, т.е. при выходе из функции будет уничтожена переменная c, но не данные по преданному адресу. |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Не прав. В данном случае выражение *c = 'd' изменяет не строку, а символ в строке по адресу *c (1 байт); вопрос же стоял, как передать строку из функции -- если например присвоить c = "dddd";, то при выходе из функции строковый литерал будет уничтожен, и переменная c потеряет валидность. Это сообщение отредактировал(а) mr.DUDA - 8.1.2004, 21:30 -------------------- ![]() |
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: нет Всего: 64 |
mr.DUDA Но ведь c указывает туда, куда и b(c = b), а b в свою очередь указатель на переданую в функцию a. Т.е. должны изменяться байтики a. Или я не до конца что то понял?
Это сообщение отредактировал(а) <Spawn> - 9.1.2004, 05:15 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
RAN |
|
||||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
<Spawn>, да всё ты правильно понимаешь. mr.DUDA имеет ввиду, что задача была другой. Просто автор темы пока не силён в языке и его не поняли. Надо поменять строку полностью, а не первый символ. Мой совет использовать контейнер какой-нибудь.
Другой способ, самому делать то, что делает контейнер. Освобождать память от старой строки, выделять для новой, проверять на недостаток памяти, если надо, и т.п.
|
||||
|
|||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
всем спасибо за участие
![]() сделал по методу <Spawn> void func(char *b) { char *c; c = b; *c = 'd'; } void __fastcall TForm1::Button1Click(TObject *Sender) { char *a = new char[10]; func(a); } вместо *c = 'd' использовал цикл и все ОК -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
maxim1000 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
интересная конструкция ![]()
Это сообщение отредактировал(а) maxim1000 - 9.1.2004, 12:24 -------------------- qqq |
||||||
|
|||||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
to maxim1000
почитай первый пост ![]() -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
RAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
_hunter верно указал. Вы немного запутались. Переменная с в твоём коде не нужна. Твоя функция заменяет первый символ в строке и всё. Причём если ей передать "", то результат не предсказуем. Нулевой байт будет заменён символом 'b'. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |