C++ “如何修复”;“没有合适的转换函数”;“字符串”;至;常量字符*”;是否存在;?
我不太确定如何做到这一点,我已经搜索并尝试了许多不同的东西,但我就是不能让它工作?strcpy(主机、数据);是什么给了我错误C++ “如何修复”;“没有合适的转换函数”;“字符串”;至;常量字符*”;是否存在;?,c++,string,syntax,char,C++,String,Syntax,Char,我不太确定如何做到这一点,我已经搜索并尝试了许多不同的东西,但我就是不能让它工作?strcpy(主机、数据);是什么给了我错误 char host[60] = "www.yahoo.com"; void loop() { String content = ""; char character; while (Serial.available()) { character = Serial.read(); content.concat(ch
char host[60] = "www.yahoo.com";
void loop() {
String content = "";
char character;
while (Serial.available()) {
character = Serial.read();
content.concat(character);
}
if (content != "") {
String CMD = getValue(content, '|', 0);
String DATA = getValue(content, '|', 1);
if (CMD == "SSID")
{
Serial.println("Your CMD is:" + CMD + " And your DATA is:" + DATA);
}
else if (CMD == "PASS")
{
Serial.println("Your CMD is:" + CMD + " And your DATA is:" + DATA);
}
else if (CMD == "HOST")
{
Serial.println("Your CMD is:" + CMD + " And your DATA is:" + DATA);
strcpy(host, DATA);
}
}
delay(100);
}
如果
String
,是std::String
,您可以
strcpy(host, DATA.c_str());
例如,如果它是一个自定义类
class String
{
char buffer[20];
//add a method c_str() for example like the std::string does
const char * c_str() { return buffer; }
//or just go yolo and overload the operator const char * like a boss
operator const char *() { return buffer; }
};
您现在所要做的就是
strcpy(buff,DATA)
并且将使用操作符const char*()
。字符串是std::String吗?自定义类?什么是String
?它当然不是char*
,而这正是strcpy所期望的。您需要将字符串
转换为常量字符*
,可能是通过其成员函数。例如,std::string
有一个c_str()
成员函数可以实现这个功能;但是我不能做strcpy(主机,数据)@因为C++是强类型的,而<代码>数据类型>代码>是代码>字符串ch> <代码>或<代码> const char */COD>,而且也没有从<代码>字符串 >到“代码> > char *<代码>或<代码> const char */COD>的隐式转换。因为他们可能会在你最不期待的时候出现。在C++11中,您可以使它们显式地,或者只使用C_str()
成员函数。是的,忘了这一点。现在您需要一个强制转换的strcpy(buff,(const char*)数据),因为它不会隐式地转换;)@vsoftco不是真的,因为strcpy将常量字符*作为第二个参数。然后转换为常量字符*
,对不起。但如果转换运算符为显式,则肯定需要显式强制转换,请参阅。