【发布时间】:2018-08-08 11:16:12
【问题描述】:
让我们考虑下面的代码示例。基本上,getMessage1(内部)创建了一个std::string,该std::string 旨在返回,然后通过printf 打印。如何转换/转换/操作变量 myString 以使输出看起来像来自 getMessage2 的输出?
我知道getMessage3 有效,但它要求我在每个printf 语句中包含.c_str()(我想避免这个额外的后缀)。
#include <string>
const char* getMessage1() {
std::string myString = "SomeOutput";
return myString.c_str();
}
const char* getMessage2() {
return "SomeOutput";
}
std::string getMessage3() {
std::string myString = "SomeOutput";
return myString;
}
int main() {
printf("#1: %s \n", getMessage1()); // prints #1: ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠¿ⁿ9"w
printf("#2: %s \n", getMessage2()); // prints #2: SomeOutput
printf("#3: %s \n", getMessage3().c_str()); // prints #3: SomeOutput
return 0;
}
【问题讨论】:
-
请问你为什么不选择
cout? -
getMessage1具有未定义的行为,您正在返回一个指向字符串数据的指针,但函数结束时它将无法生存。 -
@Aziuth 因为我通常会像
%19s这样来对齐输出。如果cout可以做到这一点,我很乐意改变它。 -
@Phil-ZXX Something like this?
-
@Borgleader 啊,很好。与
cout相比,printf是否存在普遍的反感?
标签: c++ string c++11 printing printf