我有这个微不足道的计划。
#include <iostream>
#include <string>
int main()
{
std::string st = ('='+"10");
std::cout<<st<<"-"<<st.c_str();
return 0;
}
没有运行它会期望什么样的输出?
我得到:-
我在使用boost :: spirit库并将其输出作为c-strings传递时遇到了这样的问题。
我错过了什么吗?我正在使用gcc 4.6.1(ubuntu 10.10)。
答案 0 :(得分:3)
此:
'=' + "10"
可能没做你期望的事。它不是连接,而是将“=”的“ASCII”值“加”(算术)到指向文字字符串“10”的指针,这是一个缓冲区溢出,因此会调用未定义的行为。
如果你在valgrind下运行你的程序,你可能会看到它抱怨这个。
相反,请尝试:
std::string st = "=";
st += "10";
答案 1 :(得分:1)
尝试改为:
#include <iostream>
#include <string>
int main()
{
std::string st = ('='+std::string("10"));
std::cout<<st<<"-"<<st.c_str();
return 0;
}
注意"10"
是const char*
(指针)。添加它将使用标准整数运算增加指针,而不是连接字符串。