在类中分配数组指针

时间:2016-10-06 10:27:29

标签: c++ arrays

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之前   ']'令牌

enter image description here enter image description here

2 个答案:

答案 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字符串,s1s2都会衰减到指针,您必须使用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字符串为您带来的许多问题。