Я использую функцию с переменным числом параметров, например такую:
void test (int first, ... )
{
va_list list;
va_start(list, first);
char *buf = va_arg(list, char *);
buf = "g";
}
В обычной функции если я передам в функцию в одном из параметров адрес переменной( &str) то функция будет работать именно с str а не со своей локальной переменной, т.е. после отработки функции str поменяет свое значение, если я изменю его в функции. Но как сделать это с функцией с пер. числом параметров?
Попытался сделать:
On Tue, 29 Nov 2005 11:46:34 +0200, wrote:
> Я использую функцию с переменным числом параметров, например такую: > void test (int first, ... ) > { > va_list list; > va_start(list, first); > char *buf = va_arg(list, char *); > buf = "g"; > } > > В обычной функции если я передам в функцию в одном из параметров адрес переменной( &str) то функция будет работать именно с str а не со своей локальной переменной, т.е. после отработки функции str поменяет свое значение, если я изменю его в функции. Но как сделать это с функцией с пер. числом параметров? > Попытался сделать: > > void main void > { > char *str; str = "h";
/*
Вы лутше обратите внимание на то что написали — ви передаете не char * a char **, а всередине интрпретируете ево как char * — ошиПка — вы трете гдето пам'ять изменяя ето значение
*/
> // test(1, &str); — ERROR !!!
test(1, str); // — так должно работать > } > > Однако str не изменился на "g".
Posted via RSDN NNTP Server 1.9
make it simple as possible, but not simpler
Re[3]: Функция с переменным числом параметров
От:
Аноним
Дата:
29.11.05 10:01
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:
АШ>Работа над ошибками: АШ><-- test(1, &str); -->> test(1, str);
Здравствуйте, Анатолий Широков, Вы писали:
АШ>Работа над ошибками: АШ><-- test(1, &str); -->> test(1, str);
и не забудем va_end (list) в конце поставить
Re[2]: Функция с переменным числом параметров
От:
Аноним
Дата:
29.11.05 10:19
Оценка:
Здравствуйте, andrij, Вы писали:
>> Попытался сделать: >> >> void main void >> { >> char *str; str = "h";
A> /* A> Вы лутше обратите внимание на то что написали — ви передаете не A> char * a char **, а всередине интрпретируете ево как A> char * — ошиПка — вы трете гдето пам'ять изменяя ето значение A> */
>> // test(1, &str); — ERROR !!! A> test(1, str); // — так должно работать
Не работает. Если просто передаю str, то прога просто умирает с предложением послать отчет в Майкрософт
Выше был вариант завести str как str[32] — тогда работает. Но как сделать, если str надо завести именно как указатель?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, andrij, Вы писали:
>>> Попытался сделать: >>> >>> void main void >>> { >>> char *str; str = "h";
A>> /* A>> Вы лутше обратите внимание на то что написали — ви передаете не A>> char * a char **, а всередине интрпретируете ево как A>> char * — ошиПка — вы трете гдето пам'ять изменяя ето значение A>> */
>>> // test(1, &str); — ERROR !!! A>> test(1, str); // — так должно работать
А>Не работает. Если просто передаю str, то прога просто умирает с предложением послать отчет в Майкрософт А>Выше был вариант завести str как str[32] — тогда работает. Но как сделать, если str надо завести именно как указатель?
Потому-что память для str не выделяешь.
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[4]: Функция с переменным числом параметров
От:
Аноним
Дата:
29.11.05 10:24
Оценка:
Здравствуйте, night_beast, Вы писали:
_>Здравствуйте, Анатолий Широков, Вы писали:
АШ>>Работа над ошибками: АШ>><-- test(1, &str); -->>> test(1, str);
_>и не забудем va_end (list) в конце поставить
Про va_end то я знаю, в функции в проге он стоит. Но проблема теперь в другом — работает только если заводит str как str[32/*не важно сколько*/], а если завести как *str и потом передать в функцию как str (как посоветовал andrij) то прога вылетает с ошибкой...
Re[4]: Функция с переменным числом параметров
От:
Аноним
Дата:
29.11.05 10:25
Оценка:
Здравствуйте, ekamaloff, Вы писали:
А>>Не работает. Если просто передаю str, то прога просто умирает с предложением послать отчет в Майкрософт А>>Выше был вариант завести str как str[32] — тогда работает. Но как сделать, если str надо завести именно как указатель?
E>Потому-что память для str не выделяешь.
Я выделил, т.е. сделал char *str = new char[50]. Тоже самое
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, night_beast, Вы писали:
_>>Здравствуйте, Анатолий Широков, Вы писали:
АШ>>>Работа над ошибками: АШ>>><-- test(1, &str); -->>>> test(1, str);
_>>и не забудем va_end (list) в конце поставить А>Про va_end то я знаю, в функции в проге он стоит. Но проблема теперь в другом — работает только если заводит str как str[32/*не важно сколько*/], а если завести как *str и потом передать в функцию как str (как посоветовал andrij) то прога вылетает с ошибкой...
исходник покажи...
Re[6]: Функция с переменным числом параметров
От:
Аноним
Дата:
29.11.05 10:45
Оценка:
Здравствуйте, night_beast, Вы писали:
_>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, night_beast, Вы писали:
_>>>Здравствуйте, Анатолий Широков, Вы писали:
АШ>>>>Работа над ошибками: АШ>>>><-- test(1, &str); -->>>>> test(1, str);
_>>>и не забудем va_end (list) в конце поставить А>>Про va_end то я знаю, в функции в проге он стоит. Но проблема теперь в другом — работает только если заводит str как str[32/*не важно сколько*/], а если завести как *str и потом передать в функцию как str (как посоветовал andrij) то прога вылетает с ошибкой...
_>исходник покажи...
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, night_beast, Вы писали:
_>>Здравствуйте, Аноним, Вы писали:
А>>>Здравствуйте, night_beast, Вы писали:
_>>>>Здравствуйте, Анатолий Широков, Вы писали:
АШ>>>>>Работа над ошибками: АШ>>>>><-- test(1, &str); -->>>>>> test(1, str);
_>>>>и не забудем va_end (list) в конце поставить А>>>Про va_end то я знаю, в функции в проге он стоит. Но проблема теперь в другом — работает только если заводит str как str[32/*не важно сколько*/], а если завести как *str и потом передать в функцию как str (как посоветовал andrij) то прога вылетает с ошибкой...
_>>исходник покажи...
А>
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, ekamaloff, Вы писали:
А>>>Не работает. Если просто передаю str, то прога просто умирает с предложением послать отчет в Майкрософт А>>>Выше был вариант завести str как str[32] — тогда работает. Но как сделать, если str надо завести именно как указатель?
E>>Потому-что память для str не выделяешь.
А>Я выделил, т.е. сделал char *str = new char[50]. Тоже самое
Ага, теперь ты выделяешь, но сразу теряешь ее из-за этого присваивания: str = "h"; В другом топике правильный ответ (впрочем ты уже заценил — пасыб).
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde