Arduino/C char 构造产生垃圾

Arduino/C char construction generates trash

我有以下代码(片段):

void readEeprom(){
  int lenPass = int(EEPROM.read(0));
  int lenSsid = int(EEPROM.read(1));
  char password2[lenPass];
  char ssid2[lenSsid];

  for(int i = 0; i < lenPass; i++){
  password2[i] = char(EEPROM.read(i+2)) ;
  Serial.println(password2);  
  };
  Serial.print(":");
  for(int i = 0; i < lenSsid; i++){
  ssid2[i]= char(EEPROM.read(i+lenPass+2));
  Serial.println(ssid2);
  };
  Serial.println("password2: " + String(password2));
  Serial.println("ssid2: " + String(ssid2));
  WiFi.begin(ssid2, password2);
  };

这是一个 Arduino/C 代码,应该从内部 EEPROM 中读取一些配置并连接到 WiFi(它是一个 ESP8266 模块 (wemos D1 mini))。

但是,读取工作正常,这是我通过串行控制台获得的结果:

T
Tk
TkP
TkPw⸮⸮⸮?⸮⸮⸮?$ @⸮⸮⸮?
TkPwm⸮⸮?⸮⸮⸮?$ @⸮⸮⸮?
TkPwmh⸮?⸮⸮⸮?$ @⸮⸮⸮?
TkPwmhu?⸮⸮⸮?$ @⸮⸮⸮?
TkPwmhuj⸮⸮⸮?$ @⸮⸮⸮?
TkPwmhujr⸮⸮?$ @⸮⸮⸮?
TkPwmhujrs⸮?$ @⸮⸮⸮?
TkPwmhujrs$?$ @⸮⸮⸮?
:W
WL
WLA
WLAN⸮⸮⸮?⸮⸮⸮?Pt @TkPwmhujrs$?$ @⸮⸮⸮?
WLAN-⸮⸮?⸮⸮⸮?Pt @TkPwmhujrs$?$ @⸮⸮⸮?
WLAN-U⸮?⸮⸮⸮?Pt @TkPwmhujrs$?$ @⸮⸮⸮?
WLAN-Ul?⸮⸮⸮?Pt @TkPwmhujrs$?$ @⸮⸮⸮?
WLAN-Ull⸮⸮⸮?Pt @TkPwmhujrs$?$ @⸮⸮⸮?
WLAN-Ullr⸮⸮?Pt @TkPwmhujrs$?$ @⸮⸮⸮?
WLAN-Ullri⸮?Pt @TkPwmhujrs$?$ @⸮⸮⸮?
WLAN-Ullric?Pt @TkPwmhujrs$?$ @⸮⸮⸮?
WLAN-UllrichPt @TkPwmhujrs$?$ @⸮⸮⸮?

password2: TkPwmhujrs$?$ @⸮⸮?
ssid2: WLAN-UllrichPt @TkPwmhujrs$?$ @⸮⸮?

如您所见,password2ssid2 字符数组的构造产生了垃圾,连接无法正常工作。

任何人都可以理解并帮助我吗?

C 中的 char 数组中的字符串必须以 null 结尾,以便像 print 这样的函数知道它们在哪里结束。现在您设置了一个名为 password2 的数组,其长度为一定长度(您没有显示所有代码所以谁知道)。它被分配到内存中,并且充满了那些内存位置中遗留下来的垃圾。然后你读取一个字符并添加到第一个插槽并告诉它打印整个数组。你看到了什么?您会看到您添加的一个字符后跟数组中的所有垃圾。添加第二个和第三个字符后,情况相同,依此类推。你必须在字符串的末尾放置一个空的 '\0' 来告诉打印函数有用部分在哪里结束,这样它就不会打印整个数组,而只会打印你已经填充的部分。

for(int i = 0; i < lenPass; i++){
  password2[i] = char(EEPROM.read(i+2)) ;
  password2[i+1] = '[=10=]';
  Serial.println(password2);  
  };