C++ 只有第一行SPIFFS可以在WiFi上工作。begin()-ESP8266-12E

C++ 只有第一行SPIFFS可以在WiFi上工作。begin()-ESP8266-12E,c++,esp8266,spiffs,C++,Esp8266,Spiffs,当我运行下面的代码时,只有一行可以工作。如果我注释掉SSID写/读部分,密码将起作用。如果我注释掉SSID将工作的密码部分。但是,如果我将两者都留在WiFi中,则永远无法连接。我在WiFi.begin()中对SSID和密码进行了硬编码,以检查是否正常,并确保它能够连接。所以这一定和我用SPIFFS写或读不止一行的方式有关。不过,我确实正确地返回了这两行,所以至少,如果我将它们序列化为Serial.println()的话。我也支持任何建议的SPIFF替代方案,因为我对使用返回字符串的函数不太感兴趣

当我运行下面的代码时,只有一行可以工作。如果我注释掉SSID写/读部分,密码将起作用。如果我注释掉SSID将工作的密码部分。但是,如果我将两者都留在WiFi中,则永远无法连接。我在WiFi.begin()中对SSID和密码进行了硬编码,以检查是否正常,并确保它能够连接。所以这一定和我用SPIFFS写或读不止一行的方式有关。不过,我确实正确地返回了这两行,所以至少,如果我将它们序列化为Serial.println()的话。我也支持任何建议的SPIFF替代方案,因为我对使用返回字符串的函数不太感兴趣。。当然,我更希望有一个返回char*的函数,但是我的C非常生疏。我还尝试了各种终止符\r\n和\0在写入和读取级别,到目前为止没有任何效果,还尝试了修剪字符串。我省略了一些基础知识,但我做了一个SPIFFS.begin()和格式化(当然不是按那个顺序),这似乎很有效,因为我似乎恢复了Serial.println()的正确性。我使用win10 x64安装了最新的arduino IDE和SPIFFS。代码如下:

if (SPIFFS.begin())
{
    Serial.println("SPIFFS.begin()...");

    File f = SPIFFS.open(file, "w");//write...

    if (!f)
    {
        Serial.println("failed to open.");
    }
    else//yes, file exists...
    {
        //found file write to it..
        f.println("SomeSSID");//ssid...
        f.println("MyPassword");//password...

        f.close();

        //now lets read the file..
        f = SPIFFS.open(file, "r");

        if (!f)
        {
            Serial.println("file failed to open..");
        }
        else
        {
            //read file...          
            String SSID = f.readStringUntil('\n');              
            String PASSWORD = f.readStringUntil('\n');

            f.close();

            //this didn't help
            /*SSID.trim();
            PASSWORD.trim();*/

            ssid = (char*)SSID.c_str();
            pwd = (char*)PASSWORD.c_str();

            Serial.println(ssid);
            Serial.println(pwd);
        }
    }       
}

//does not work..
WiFi.begin(ssid, pwd);

@丹达维斯-谢谢!最后我把它改为:const char*ssid=f.readStringUntil('\n').c_str()

尝试
char*ssid;字符串ss=f.readStringUntil('\n');ss.toCharArray(ssid,ss.length()+1)