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

Ваш аккаунт

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

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

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

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

516
23 августа 2002 года
buxalych
15 / / 20.01.2000
//Написал функцию конкатенирования строковых переменных(указателей)
//с переменным числом параметров у функции...и вобщем следующее...
//возникает проблема, смотрите:

#include <stdio.h>
#include <stdarg.h>
#include <string.h>

char *concat(char *s, ...){
char *arg, *ret = s;
va_list ap;
va_start(ap, s);
while((arg = va_arg(ap, char*)) != NULL)
strcat(ret, arg);
va_end(ap);
return (ret);
}


void main(void)
{
// 1...после работы функции concat(s3, s2, s1) она возвратит строку &quot;What a fuck?&quot;,
//но(!!!!) почему-то эту строку в программе использовать я не могу
// и printf() выведет на экран только &quot; fuck?&quot;
char *s1=&quot;fuck?&quot;, *s2=&quot;a &quot;, *s3=&quot;What &quot;;
printf(&quot;%s\n&quot;, concat(s3, s2, s1, NULL));

// 2...после работы функции concat(str1, str2, str3) она возвратит строку
//&quot;What a fuck?&quot; и её можно будет использовать в программе, а printf() выведет на экран
//полностью строку &quot;What a fuck?&quot;
char *str1=&quot;What &quot;, *str2=&quot;a &quot;, *str3=&quot;fuck?&quot;;
printf(&quot;%s\n&quot;, concat(str1, str2, str3, NULL));

// 3...Все работает нормально без глюков.
printf(&quot;%s\n&quot;, concat(&quot;What &quot;, &quot;a &quot;, &quot;fuck?&quot;, NULL));
}


//ВОБЩЕМ МНЕ НУЖНО ВЫЗЫВАТЬ ФУНКЦИЮ concat() с переменными а не с указанием сразу в
//функцию значений....оьясните в чем глюк!!!

//Спасибо!




571
23 августа 2002 года
Beep
6 / / 20.12.1999
Рользуйся cin и cout для ввода вывода
намного круче и проще
А проблема тут с фунцией printf она с пробелами бока порит.

#include <stdio.h>
#include <stdarg.h>
#include <string.h>
///ВОТ И ВСЕ!!!!!!!
#include<iostream.h>
///ВОТ И ВСЕ!!!!!!!

char *concat(char *s, ...){
char *arg, *ret = s;
va_list ap;
va_start(ap, s);
while((arg = va_arg(ap, char*)) != NULL)
strcat(ret, arg);
va_end(ap);
return (ret);
}
void main(void)
{
char *s1=&quot;fuck?&quot;, *s2=&quot;a &quot;, *s3=&quot;What &quot;;
///ВОТ И ВСЕ!!!!!!!
cout << concat(s3, s2, s1, NULL);
//printf(&quot;%s\n&quot;,S);
///ВОТ И ВСЕ!!!!!!!
char *str1=&quot;What &quot;, *str2=&quot;a &quot;, *str3=&quot;fuck?&quot;;
printf(&quot;%s\n&quot;, concat(str1, str2, str3, NULL));
printf(&quot;%s\n&quot;, concat(&quot;What &quot;, &quot;a &quot;, &quot;fuck?&quot;, NULL));
}
577
23 августа 2002 года
Mozhay
81 / / 20.09.2000
char *s1 = &quot;What &quot;;
Под литерал &quot;What &quot; выделено 6 байтов памяти . И куда же функция strcat должна дописывать вторую и третью строки? Тут можно ожидать и &quot;Access violation&quot;. Меняем порядок строк - результат меняется. Если между str1 и str2 вставить переменную - после strcat она скорее всего будет испорчена.
Перед тем, как склеивать строки, надо выделить память, достаточную для хранения всего результата.

#include <stdio.h>
#include <stdarg.h>
#include <string.h>

char *concat(char *s, ...)
{
char *arg, *ret = s;
va_list ap;
va_start(ap, s);
while((arg = va_arg(ap, char*)) != NULL)
strcat(ret, arg);
va_end(ap);
return (ret);
}

int main()
{
char *s2=&quot;a &quot;, *s3=&quot;What &quot;, *s1=&quot;fuck?&quot;;
char result[20] = &quot;&quot;;
printf(&quot;%s\n&quot;, concat(result, s3, s2, s1, NULL));
return 0;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог