Создание функции, формирующую предложение из аргументов функции, аргументы . Аргументы - переменное число - C (СИ)
Формулировка задачи:
Короче, вот бы всё норм. Хочу соединять, но он мне выдаёт ошибку, когда использую strcat. Не могу понять, с типами аргументов вроде проблем нет( там символьный указатель, здесь символьный указатель), но когда ставлю что - нибудь из своего динамического массива, всё сразу летит.
Вот код:
char *sentence( int CountArg, ...) { int i; char **word = (char**)malloc(sizeof(char)*CountArg); char *s; for ( i = 0; i < CountArg; i++) word[i] = (char*)malloc(sizeof(char)*N); va_list arglist; va_start( arglist, CountArg ); for ( i = 0; i < CountArg; i++) word[i] = va_arg( arglist, char*); va_end(arglist); i = 0; s = word[i]; return s; }
Решение задачи: «Создание функции, формирующую предложение из аргументов функции, аргументы . Аргументы - переменное число»
textual
Листинг программы
char *sentence( int CountArg, ...) { int i; char **word = (char**)malloc(sizeof(char)*CountArg); char *s; for ( i = 0; i < CountArg; i++) word[i] = (char*)malloc(sizeof(char)*N); va_list arglist; va_start( arglist, CountArg ); for ( i = 0; i < CountArg; i++) word[i] = va_arg( arglist, char*); va_end(arglist); i = 0; s = word[i]; for( i = 1; i < CountArg; i++) { strcat(s, " "); strcat(s, word[i]); } return s; }
Объяснение кода листинга программы
В данном коде реализована функция sentence, которая принимает целочисленный аргумент CountArg и переменное количество аргументов.
- Сначала объявляются необходимые переменные:
- i - используется для обхода массива аргументов;
- word - динамический массив указателей на строки;
- s - указатель на строку, в которую будут конкатенироваться аргументы;
- N - размер памяти, выделенной под каждый аргумент.
- Затем происходит выделение памяти под массив указателей на строки: word = (char*)malloc(sizeof(char)CountArg);
- После чего, в цикле происходит выделение памяти под каждый аргумент: for ( i = 0; i < CountArg; i++) word[i] = (char)malloc(sizeof(char)N);
- Инициализируется переменная arglist для работы с вариативными аргументами: va_start(arglist, CountArg);
- В цикле происходит получение каждого аргумента: for ( i = 0; i < CountArg; i++) word[i] = va_arg(arglist, char*);
- После обработки всех аргументов, освобождается память, выделенная под arglist: va_end(arglist);
- Устанавливается начальное значение i = 0 и s = word[i];
- В цикле, начиная со второго аргумента, происходит добавление каждого аргумента к строке s:
for( i = 1; i < CountArg; i++)
strcat(s,
- В конце функции возвращается полученная строка s.
- Функция может быть вызвана следующим образом:
char *str = sentence(3,
first
,second
,third
); Вывод:first second third
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д