【问题标题】:assignment of array pointer in a class类中数组指针的赋值
【发布时间】:2017-02-15 01:21:16
【问题描述】:
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: 错误:']' 之前的预期主表达式 令牌 stringhandler.cpp:26:错误:预期的主表达式之前 ‘]’ 标记

enter image description here

【问题讨论】:

  • str1= s1[]; 这不是有效的语法,你想做什么?
  • 我只是想传递两个字符串并将其分配给类字段
  • @MaheshDhokade 那么请实际使用strings,这会让你的生活更轻松。

标签: c++ arrays


【解决方案1】:

你不能做str1=s1[]。这是无效的。使用它来将一个数组复制到另一个:

void SetString(char s1[], char s2[]){
    std::copy(s1, s1+20, std::begin(str1));
    std::copy(s2, s2+20, std::begin(str2));
}

更好的是,使用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;

【讨论】:

  • 通过const &amp; 现在通常是悲观的。特别是如果您已经准备复制它们。
  • @M.M 感谢您的通知
【解决方案2】:

你不能像这样复制 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 字符串带来的问题。

【讨论】:

  • s1s2 应在此处由 const &amp; 传递,或者为左值和右值引用重载。
  • 或者,str1 = std::move(s1) 等等。
  • @juanchopanza 有可能 OP 无法访问 C+11,如果是这种情况,我不想冒编译错误的风险。
  • 好的,那么不清楚你从价值传递中获得了什么。也许你在右值上收支平衡,但在左值上输了。
  • 我只是在程序中进行字符串操作,而没有使用字符串函数,因为我在 main 中接受来自用户的字符串并尝试分配给类字段,如您所见,我已将类字段声明为私有所以我无法在主函数中访问它所以请指导我如何将用户输入的字符串分配给私有字段
猜你喜欢
  • 1970-01-01
  • 2020-09-07
  • 2021-05-13
  • 2017-03-26
  • 2016-05-03
  • 1970-01-01
  • 2012-07-19
  • 2012-05-09
  • 1970-01-01
相关资源
最近更新 更多