Вылет функции с ошибкой
От: Аноним  
Дата: 29.11.05 10:41
Оценка:
Кто может ответить, почему код вида:
void test (int first, ... )
{
va_list list;
va_start(list, first);
char *buf = va_arg(list, char *);
strcpy(buf, "g");
va_end(list);
}

void main void
{
char *str = new char[50]; str = "h";
test(1, str);
}

вылетает с ошибкой?
Re: Вылет функции с ошибкой
От: ekamaloff Великобритания  
Дата: 29.11.05 10:46
Оценка: 2 (1)
Здравствуйте, Аноним, Вы писали:

А>Кто может ответить, почему код вида:

А>void test (int first, ... )
А>{
А>va_list list;
А>va_start(list, first);
А>char *buf = va_arg(list, char *);
А>strcpy(buf, "g");
А>va_end(list);
А>}

А>void main void

А>{
А>char *str = new char[50]; str = "h";
А>test(1, str);
А>}

А>вылетает с ошибкой?


Нужно так:

void test (int first, ... )
{
  va_list list;
  va_start(list, first);
  char *buf = va_arg(list, char *);
  strcpy(buf, "g");
  va_end(list); 
}

void main void
{
  char *str = new char[50];
  strcpy(str, "h");
  test(1, str);
}
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re: Вылет функции с ошибкой
От: Greg Zubankov СССР  
Дата: 29.11.05 10:54
Оценка: 2 (1) +1
Здравствуйте, Аноним, Вы писали:

А>Кто может ответить, почему код вида:

А>void test (int first, ... )
А>{
А>va_list list;
А>va_start(list, first);
А>char *buf = va_arg(list, char *);
А>strcpy(buf, "g");
А>va_end(list);
А>}

А>void main void

А>{
А>char *str = new char[50]; str = "h";
А>test(1, str);
А>}

А>вылетает с ошибкой?

Потому, что указатель str указывает не на выделенную тобой память а на константный строку "h\0".
Скопируй h в str и используй.
Re[2]: Вылет функции с ошибкой
От: Sitr Россия  
Дата: 29.11.05 10:55
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>Здравствуйте, Аноним, Вы писали:


А>>Кто может ответить, почему код вида:

А>>void test (int first, ... )
А>>{
А>>va_list list;
А>>va_start(list, first);
А>>char *buf = va_arg(list, char *);
А>>strcpy(buf, "g");
А>>va_end(list);
А>>}

А>>void main void

А>>{
А>>char *str = new char[50]; str = "h";
А>>test(1, str);
А>>}

А>>вылетает с ошибкой?


E>Нужно так:


E>
void test (int first, ... )
E>{
E>  va_list list;
E>  va_start(list, first);
E>  char *buf = va_arg(list, char *);
E>  strcpy(buf, "g");
E>  va_end(list); 
E>}

E>void main void
E>{
E>  char *str = new char[50];
E>  strcpy(str, "h");
E>  test(1, str);
E>}


Вылетать действительно перестало, ответ оценил, спс
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.