Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Функция с произвольным числом параметров

2.0K
07 февраля 2004 года
Smagen
29 / / 01.05.2003
Требуется создать функция следующего вида:

void my_func(char *fmt,...)
{
char s[256];
sprintf(s,fmt,...);
// Дальше работаем со строкой s
}

Вопрос: как правильно передать в фукцию sprintf все параметры фукции my_func
1
07 февраля 2004 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Smagen
Требуется создать функция следующего вида:

void my_func(char *fmt,...)
{
char s[256];
sprintf(s,fmt,...);
// Дальше работаем со строкой s
}

Вопрос: как правильно передать в фукцию sprintf все параметры фукции my_func


Как говорит один мой знакомы за такие приемы программирования надо руки отбивать по самые плечи...

Код:
void my_func(char *fmt,...){
char s[256];
 va_list list;
 va_start(list,fmt);
 for(;;){
 char *p=va_arg(list,char*);
 if(p==0)break;
  sprintf(s,p);//Или что ты там хочешь делать
 }
va_end(list);
}

Не забудь выполнить проверку на длину строки.
Вобще-то необходимость использовать функциию с произвольным числом параметров возникает ну ОЧЕНЬ редко, как правило всегда можно обойтись указателем на массив строк или чем-то подобным.
270
07 февраля 2004 года
Drew
265 / / 20.07.2000
br />


2 kot_
... мы все учились по-немногу... и где-нибудь, и как-нибудь... :)

3
08 февраля 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by kot_

Как говорит один мой знакомы за такие приемы программирования надо руки отбивать по самые плечи...
Код:
void my_func(char *fmt,...){
char s[256];
 va_list list;
 va_start(list,fmt);
 for(;;){
 char *p=va_arg(list,char*);
 if(p==0)break;
  sprintf(s,p);//Или что ты там хочешь делать
 }
va_end(list);
}

Не забудь выполнить проверку на длину строки.
Вобще-то необходимость использовать функциию с произвольным числом параметров возникает ну ОЧЕНЬ редко, как правило всегда можно обойтись указателем на массив строк или чем-то подобным.



Зачем так сложно? :D
И опасно... char s[256];
Пример из MSDN, думаю, комментарии излишни:

Код:
void test( char * format, ... )
{
   va_list args;
   int len;
   char * buffer;

   va_start( args, format );
   len = _vscprintf( format, args )+ 1;
   buffer = malloc( len * sizeof(char) );
   vsprintf( buffer, format, args );
   printf( buffer );
   free( buffer );
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог