C++ toString() 和 sprintf()

标签 c++ string tostring printf c-str

使用 C++,我尝试为我的类实现 toString() 函数:

void ClassName::toString(string& returnString)
{
    sprintf(returnString.c_str(), "Position: (%f, %f, %f)\n", position.x, position.y, position.y);
}

但是我不断收到此错误:const char* 类型的参数与 char* 类型的参数不兼容

如何解决这个问题并使参数不再为常量?

最佳答案

How do I fix this?

使用不同的方法,使用stringstream代替或使用辅助缓冲区。

void ClassName::toString(string& returnString)
{
    std::stringstream ss;
    ss << "Position: (" << position.x << ", " << position.y << ", " 
       << position.z << ")\n");
    returnString = ss.str();
}

and make the argument no longer const?

不要。如果将 c_str 更改为非常量类型,后果将不堪设想。程序员同胞们一定会流泪的。天使将失去翅膀。小猫会死。石油价格将会上涨。股市崩盘。僵尸启示录。

它是const是有原因的 - 所以你不能修改它。这样做会导致未定义的行为。

关于C++ toString() 和 sprintf(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11892774/

相关文章:

c++ - const 类型容器的 const_iterator 类型

java - Java中字节到整数再到字符串的转换

java - EditText 不更新其文本

javascript - String(number) 是否在内部调用 number.toString?

c++ - 数误差的质因数分解

c++ - std::allocate_shared 使用什么类型来分配内存?

c++ - 要求用户输入他/她的名字,然后反转给定的名字并将其显示在屏幕上。使用字符数组

c++ - 为什么 fstream.open(filename) 使用文字而不是生成的字符串?

c - 文件到字符串数组(逐行)

Java StringTokenizer.nextToken() 跳过空字段