std :: string的奇怪行为

时间:2012-01-16 01:21:46

标签: c++ string

我有这个微不足道的计划。

#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)。

2 个答案:

答案 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*(指针)。添加它将使用标准整数运算增加指针,而不是连接字符串。