Ошибка C ++: невозможно преобразовать char (*) [63] в char * при инициализации

Я, кажется, больше нуб в C ++, чем я первоначально думал. Насколько я знаю C / C ++, это должно работать. Я определяю массив символов, затем пытаюсь назначить указатель на начало … Что я делаю не так?

// Create character array
char str[] = "t xtd 02 1CF00400 08 11 22 33 44 55 66 77 88 0   0 1234.567890";
// Assign pointer to beginning of array
char* p = &str;

2

Решение

Тип str является char[63], Для справки обратите внимание, что тип строкового литерала сам по себе const char[63]не const char *, Вы берете адрес того, что дает вам указатель на char[63], или же char (*)[63], Затем вы пытаетесь присвоить это char *,

Что вы должны сделать, это не взять адрес и позволить массиву распасться на указатель:

char *p = str;

Что вы действительно должны сделать, это использовать std::string,

10

Другие решения

Вы можете просто опустить адрес оператора,

char *p = str;

работает, массивы автоматически распадаются на указатели на первый элемент в этом контексте. Или, если хотите, явно разыгрываете, но это было бы мерзостью.

4

 char* p = str;

Амперсанд избыточен. Простое имя массива просто обозначает адрес его начала.

0
По вопросам рекламы [email protected]