【发布时间】:2015-03-23 10:44:26
【问题描述】:
在 Lua 中(抱歉,我最喜欢使用它),int 和 string 之间的转换是自动完成的,所以
"hi"..2
结果是
"hi2"
在 C++ 中(因为我似乎无法让默认的 C++11 stoi() 和 to_string() 工作)我为自己定义了这些:
int stoi(string str) {
char* ptr;
strtol(str.c_str(), &ptr, 10);
}
string to_string(int i) {
char* buf;
sprintf(buf, "%d", i);
return buf;
}
这基本上是默认值的定义方式。
然后我这样做了:
string operator+ (string& stuff, int why) {
stuff.append(to_string(why));
}
我在下面的代码上试过:
void print(string str) {
cout << str << endl;
}
int main() {
cout << stoi("1") + 2 << endl;
print("die" + 1);
return 0;
}
然后输出
3
ie
为什么会这样,我该如何解决?
编辑: 现在的代码如下所示:
using namespace std;
string to_string(int i) {
char* buf;
sprintf(buf, "%d", i);
return buf;
}
string operator+ (string stuff, int why) {
stuff.append(to_string(why));
return stuff;
}
int main() {
cout << string("die") + 2 << endl;
return 0;
}
它只是不断给我堆栈转储。
【问题讨论】:
-
你觉得
char* buf; sprintf(buf, "%d", i);有什么作用?buf只是指向任何地方,但肯定不是指向要写入的有效区域。 -
erm,很明显的问题,你的意思是你不能让
std::to_string()工作?这对我来说似乎很好用?? -
它告诉我
to_string()尚未声明。 -
它应该在 C++11 中,即使我在编译期间使用
-std=c++14和#include <string>我仍然无法让它工作
标签: c++ c++11 concatenation