Работа с изменяемым списком аргументов в функции

Помогите решить проблему:в колледже задали написать программу,которая требует изменяемый список аргументов char. при запуске этой функции,начиная со 2 символа,в массив передается, ровным счетом, ничего вот код:

   #include <iostream>
#include <windows.h>
using namespace std;

void fun(int kol, char str, ...)
{
    char* chr = &str;
    int i1 = 0;
    int kol1 = kol;
    char* ind = new char[kol];
    int* counters = new int[kol]; // Массив повторов
    while(kol1--)
    {
        
        cout << "chr=" << chr<<endl;
        ind[i1] = *chr;
        cout << "ind[i]=" << (int)ind[i1]<<endl;
        chr++;
        i1++;
    }
    // Подсчитать кол-во повторов в массиве
    for (int i = 0; i < kol; i++)
        counters[i] = count(ind, ind + kol, ind[i]);
    // Поиск максимума 
    int max = 0;
    for (int i = 0; i < kol; i++) 
        if (counters[i] > max)
            max = counters[i];
    cout << "чаще всего встречается символ " << ind[max]<<endl;
    delete [] ind;
    delete [] counters;
} 
int main()
{
    SetConsoleOutputCP(1251);//корректная работа со словами из кириллицы
    SetConsoleCP(1251);
    fun(7, 's', 'o', 'b', 'a', 'k', 'a', '\0');
    return 0;

}

Ответы (1 шт):

Автор решения: Harry

Этот kol не нужен категорически. Есть условие завершения чтения - нулевой символ, его достаточно. А так вы можете передать в kol, скажем, 3, а символов дать 10 (или наоборот) - и что тогда делать?

void fun(char c, ...)
{
    int cnt[256] = { 0 };
    va_list ap;
    va_start(ap,c);

    while(c)
    {
        cnt[(unsigned char)c]++;
        c = va_arg(ap,char);
    }
    va_end(ap);

    unsigned char m = 0;
    int max = 0;
    for(int i = 0; i < 256; ++i)
        if (cnt[i] > max)
        {
            max = cnt[i];
            m = i;
        }
    printf("Count of char %c = %d\n",(char)m, max);
}

int main()
{
    fun('a','b','s','d','8','s','f','y','a','a','s','s','\0');
}

Но! тут есть хитрая тонкость. Вообще говоря, char передается в функцию как int, так что если VC++ понимает

        c = va_arg(ap,char);

то тот же gcc так работать не будет, ему нужно

        c = va_arg(ap,int);

Кстати говоря, VC++ с int тоже отработает корректно...

→ Ссылка