при компиляции с g ++ выдает следующую ошибку:
Решение
В C ++ строковые литералы имеют типы постоянных символьных массивов. Например строковый литерал "123" имеет тип const char[4] ,
В выражениях с редкими исключениями массивы преобразуются в указатели на свои первые элементы.
Так что в этой декларации
инициализатор имеет тип const char * , Там нет неявного преобразования из const char * в unsigned char *
Вы могли бы написать
Другие решения
Другой подход, который дает вам возможность изменения unsigned char массив, как вы изначально хотели, это:
Можете добавить const в обе декларации, если хотите, чтобы получить const unsigned char без явного приведения.
просто char * вместо unsigned char * во время объявления
char t [MAX_SIZE] = «123»; // MAX_SIZE должен быть определен ранее
проверено временем зЬгср () а также strncpy функции
Преобразование из одного типа в другой тип легко, когда вы используете самостоятельно определенные макросы. Итак, вот набор макросов, которые вы можете использовать на любой платформе (Windows, Linux, Solaris, AIX и т. Д.)
There’s a bunch of threads about C++, but I’m stuck with regular C here and can’t find an answer anywhere.
I’m getting errors as the title states.
[Error] invalid conversion from ‘char’ to ‘const char*’ [-fpermissive]
initializing argument 2 of ‘char* strcpy(char*, const char*)’
What the code should do is reverse the written word and type it out line by line, by each last letter. Etc. — Type in "food" and the program should output:
I know I messed up somewhere in the ‘letter’, but I have no clue how to fix it. Also I’m trying to avoid using std. personal prefrence.
В моем коде ниже эта строка:
Выбрасывает эту ошибку:
Вопрос
Почему я получаю эту ошибку? На самом деле, все, что я хочу, это объявить "b [6]" отдельно. Не так, как char b [6] = "Hello" like. Если я беру переменную int, скажите "int x", тогда я могу легко объявить ее значение отдельно, скажем "x = 2", но здесь для строковой переменной, почему я не могу это сделать,
4 ответа
В C строками рассматриваются как массивы char , а имя массива рассматривается как указатель на начало массива.
Основываясь на этом объявлении, b является указателем на начало массива из 6 char .
Эта строка пытается установить 6-й элемент b в "Hello", но есть две проблемы с этим:
b[6] фактически не существует. b — 6 элементов длиной, начиная с индекса 0, поэтому максимальный индекс, который вы можете использовать, равен 5.
b — массив, поэтому b[6] относится к определенному char тогда как вы пытаетесь установить его в String, то есть указатель на char , следовательно, ваше сообщение об ошибке.
Если вы пытаетесь сделать b удерживайте значение "Hello", существует несколько способов сделать это. Теоретически, ваш метод b = "Hello"; будет работать, но большинство из них, вероятно, будет считаться плохой практикой. Самое основное — установить значения char в массиве буквам "Hello" один за другим, за которым следует байт NULL . Используя стандартную библиотеку , вы могли (и, вероятно, должны) сделать это с помощью strcpy .
когда массив ссылается; результатом является адрес первого байта массива.
Поэтому оператор пытается назначить адрес "Hello" символу b[] .
Вы пытаетесь заполнить массив b[] ? если это так, то правильный метод:
b enter code here [6] = "Hello";
Здесь вы назначаете char const * одному символу (и, кроме того, этот символ выходит за пределы диапазона).
Если вы хотите провести "H", выполните следующие действия: