Меню Закрыть

Invalid conversion from char to char fpermissive

при компиляции с 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 * одному символу (и, кроме того, этот символ выходит за пределы диапазона).

Читайте также:  Stalker crash has been detected by bugtrap

Если вы хотите провести "H", выполните следующие действия:

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.