Не передаёться в аргумент функции типа char* символ из переменной типа char*

Есть код наподобии следующего

#include <windows.h>
#include <iostream>

void func(char* ptr)
{
    std::cout << ptr << std::endl;
    return;
}

int main()
{
    char* var_ptr = (char*)"anton";
    for(int i = 0;i < lstrlenA(var_ptr);i++)
    {
        func((char*)var_ptr[i]);
    }
}

Функция принимает только аргумент char* и у переменной тип данных тоже char* изменять я их не могу. Но мне нужно в функцию в качестве аргумента передавать по одному символу из переменной. Но когда я это делаю код срабатывает но ничего не выводиться. Я посмотрел в отладке и увидел что в функцию не поступает символа там вместо него ошибка Error reading characters of string. Вопрос можно-ли как то это исправить?


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

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

Предлагаю минимальную переделку, которая работает и без неопределенного поведения

#include <iostream>
#include <cstring>
// считаем, что эту функцию нельзя трогать
void func(char* ptr)
{
    std::cout << ptr << std::endl;
    return;
}

int main()
{
    // тут нужна именно константная строка
    const char* var_ptr = "anton";
    for(int i = 0;i < strlen(var_ptr);i++)
    {
       // так как func принимает строку
       // то сделаем строку с одного символа
       // но ее размер будет два символа - нужен ноль
        char p[2];
        p[0] = var_ptr[i];
        p[1] = '\0';
        func(p);
    }
}

сам main можно переписать даже так

int main()
{
    const char* var_ptr = "anton";
    for(int i = 0;i < strlen(var_ptr);i++)
    {
        char p[2] = {var_ptr[i]};
        func(p);
    }
}

выбирайте сами

→ Ссылка