@COUT_man

Как правильно использовать библиотеку stdarg.h на языке С и работает ли она с WSL?

Продолжаю свой тернистый путь по изучению С. Столкнулся с вопросом о необходимости написания функции с возможностью принятия не регулярного числа переменных.
По заданию должен использовать библиотеку stdarg.h. Но я не могу понять, как она работает. Я прочитал несколько статей, в которых предельно понятно описан принцип... А при практическом применении я вхожу в затуп. То ли описанный принцип не верен, тол и я чего-то не понимаю. При попытки получения значения вместо ожидаемого я получаю околесицу из символов, букв и цифр. Пытаюсь всё использовать на WSL Ubuntu.
Что не так делаю?
Для попытки понять принцип я реализовал макет кода:
spoiler
#include <stdio.h>
#include <stdarg.h>

int main(char fmt, ...)
{
    va_list ap;
    char c;
    char *s;

    c = fmt;
    va_start(ap, fmt);
    while (1)
    {
		if (c == 'c')
    	{
			printf("make c\n");
			c = (char)va_arg(ap, int);
    		printf("%c\n", c);
			break ;
		}
		if (c == 's')
    	{
			printf("make s\n");
			s = va_arg(ap, char *);
    		printf("%s\n", s);
			break ;
		}
		printf("not eat!\n");
		break ;
	}
    va_end(ap);
    return (0);
}
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
includedlibrary
@includedlibrary
С main это так не работает. Сигнатура main с аргументами командной строки выглядит так:
int main(int argc, char **argv) {
}

Что ни есть эквивалент вашего кода. В main передаётся указатель на массив строк, ваш же код предполагает, что все аргументы будут переданы через стек. Из-за этого ничего и не работает
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы