【问题标题】:Why error on const char* to const char conversion?为什么 const char* 到 const char 转换时出错?
【发布时间】:2019-09-24 23:59:17
【问题描述】:

以下代码有效:

#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";

编译器抛出错误。

为什么字符指针(我认为它是一个指针)使代码工作,而它从未在整个代码的其他地方使用?

我查看了以下链接,但我对解释感到困惑:

error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]

【问题讨论】:

  • 您是否尝试执行此操作 "char ssid = "Your wifi Network name"; '?
  • 我想知道为什么我需要 *char 以及为什么 char 不起作用
  • char 是单个字符。它不能容纳"Network password"。您需要一个数组来将文字复制到或仅指向您在工作代码中所做的文字。
  • char 只是一个字符的表示。 const char * 是指向单个字符的指针。 C++ 和 C 中的字符串文字是内存中一个接一个出现的字符块(contigious 就是这个词)。添加指针指向内存中的那个字符块。 C 中的字符串也总是以空字符结尾,所以当你有一个指向字符串开头的指针时,程序知道字符串会继续,直到遇到空字符(零)。
  • 啊,这很有道理,谢谢。我想我会对此做更多的研究

标签: c++ arrays pointers char


【解决方案1】:

char 是单个字符。 char* 是指向 char 的指针。

字符串文字 是一个固定长度的const char[] 字符数组。您可以将const char[] 数组分配给const char* 指针,因为对数组名称的引用将衰减 成为指向数组中第一个元素的指针。这就是const char *ssid = "Your wifi Network name"; 起作用的原因。

您不能将const char[] 数组或const char* 指针分配给单个char。这就是const char pass = "Network password"; 不起作用的原因。

是的,代码中使用了指针,尽管您声称它们不是。 ssid 指针作为输入传递给Serial.println()ssidpass 指针都作为输入传递给WiFi.begin()。这两个函数都将字符串作为输入。

【讨论】:

  • 谢谢,但我有点困惑为什么你需要一个指针?
  • 那么我建议您详细了解指针的实际含义。这本身就是一个完整的话题,超出了这个问题的范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 2021-03-21
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
相关资源
最近更新 更多