【问题标题】:c++ invalid operands of types 'char*' and 'const char [2]' to binary 'operator+''char *'和'const char [2]'类型的c ++无效操作数到二进制'operator +'
【发布时间】:2014-09-30 15:46:05
【问题描述】:

编译器在尝试执行此简单代码时返回错误“'char*' 和 'const char [2]' 类型的无效操作数到二进制 'operator+'”:

BodyText[client] = PS3::ReadString(0x0178646c) + "\n" ;

这里是我的 ReadString() 函数:

char returnRead[100];
char* ReadString(int address)
{
    memset(&returnRead[0], 0, sizeof(returnRead));
    int strlength = 100;
    char* StrBytes = ReadBytes(address, strlength);
    for (int i = 0; i < strlength; i++)
    {
        if (StrBytes[i] != 0x00)
            returnRead[i] = StrBytes[i];
    else
        break;
}
return returnRead;
}

感谢阅读

【问题讨论】:

  • 您不能将 C 风格的字符串与 + 连接起来。使用std::string
  • 这不是一个坏问题,字符串在 C++ 中并不容易/直观。
  • @MichaelJones 真正的字符串是。只有使用 C++ 作为 C 类的人会遇到这样的问题。 (好吧,如果你必须实现你的标准库,但这是世界范围内的几个人。)
  • 解决了这个问题:std::string x = PS3::ReadString(0x0178646c) + "\n" + PS3::ReadString(0x178BC74) + "\n" + PS3::ReadString(0x179147C ) + "\n" + PS3::ReadString(0x1796C84) + "\n" 对不起我的愚蠢

标签: c++ visual-studio-2010 char constants


【解决方案1】:

这是因为char*(你的函数的返回类型)和const char[2]"\n"的类型)没有operator+,而且你不能为内置类型重载运算符,不可能有一个。由于这个问题被标记为 C++:

只需使用std::string 而不是char*,您的所有问题都已解决。 std::string 将优于您尝试做的黑客攻击。

Here 您可以找到有关strings 功能的概述以及如何使用它们的示例。然后您可以连接字符串a,b,c,如std::string new_string = a + b + c;

【讨论】:

  • 如何连接这个??
  • 我试过这个:std::string x = "\n";字符 *y = PS3::ReadString(0x0178646c); std::strcpy(y, x.c_str());删除[] y;
  • 如果你可以改变ReadBytes,让它返回一个std::string,然后忘记char*memsetfscanf和所有这些C风格的东西。做对是不必要的困难,而且对你没有好处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多