Не передаёться в аргумент функции типа 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);
}
}
выбирайте сами