Почему ошибка преобразования const char * в const char? - PullRequest
0 голосов
/ 25 сентября 2019

Работает следующий код:

#include <ESP8266WiFi.h>

const char *ssid =  "Your wifi Network name";     // replace with your wifi ssid and wpa2 key
const char *pass =  "Network password";

WiFiClient client;

void setup() 
{
   Serial.begin(9600);
   delay(10);

   Serial.println("Connecting to ");
   Serial.println(ssid); 

   WiFi.begin(ssid, pass); 
   while (WiFi.status() != WL_CONNECTED) 
   {
      delay(500);
      Serial.print(".");
   }
   Serial.println("");
   Serial.println("WiFi connected"); 
}

Но когда строка:

const char *pass = "Network password";

заменяется на:

const char pass = "Network password";

Компилятор выдает ошибку.

Почему указатель символа (я думаю, что это указатель) заставляет код работать, когда он никогда не используется в другом месте кода?

Я посмотрел на следующую ссылку, но меня смущает объяснение:

ошибка: неверное преобразование из 'const char *' в 'char' [-fpermissive]

1 Ответ

3 голосов
/ 25 сентября 2019

A char - один символ.char* - указатель на char.

A строковый литерал - массив символов фиксированной длины const char[].Вы можете назначить массив const char[] указателю const char*, так как ссылка на имя массива будет decay в указателе на 1-й элемент в массиве.Вот почему const char *ssid = "Your wifi Network name"; работает.

Вы не можете назначить массив const char[] или указатель const char* для одного char.Вот почему const char pass = "Network password"; не работает.

И да, указатели используются в коде, несмотря на ваше утверждение, что это не так.Указатель ssid передается в качестве ввода в Serial.println(), а указатели ssid и pass передаются в качестве ввода в WiFi.begin().Обе эти функции принимают строки в качестве входных данных.

...