void SetString(char s1[], char s2[]){
str1= s1[];
str2= s2[];
}
private:
char str1[20];
char str2[20];
有些人告诉我,那段代码有什么问题。
它给了我以下错误:
stringhandler.cpp:在成员函数'void中 StringHandler :: SetString(char *,char *)':
stringhandler.cpp:25:错误:在']之前预期的primary-expression token stringhandler.cpp:26:错误:预期的primary-expression之前 ']'令牌
答案 0 :(得分:4)
你不能str1=s1[]
。它无效。使用它来代替将数组复制到另一个:
void SetString(char s1[], char s2[]){
std::copy(s1, s1+20, std::begin(str1));
std::copy(s2, s2+20, std::begin(str2));
}
更好的是,如果您将字符串作为char数组处理,则使用std::array
代替(如果您的情况一般)或std::string
。像这样:
void SetString(const std::array<char,20>& s1, const std::array<char,20>& s2){
str1=s1;
str2=s2;
}
private:
std::array<char,20> str1;
std::array<char,20> str2;
或:
void SetString(const std::string& s1, const string& s2){
str1=s1;
str2=s2;
}
private:
std::string str1;
std::string str2;
答案 1 :(得分:4)
您无法像这样复制C字符串,s1
和s2
都会衰减到指针,您必须使用strcpy
来复制它们:
strcpy(str1, s1);
strcpy(str2, s2);
但您正在使用C ++,所以您应该使用std::string
:
void SetString(const std::string& s1, const std::string& s2)
{
str1= s1;
str2= s2;
}
private:
std::string str1;
std::string str2;
或者,对于C ++ 11及更高版本:
void SetString(std::string s1, std::string s2)
{
str1= std::move(s1);
str2= std::move(s2);
}
这解决了C字符串为您带来的许多问题。