C ++将字符附加到int的std :: string

时间:2012-06-12 11:34:41

标签: c++ string pointers scope append

我有一个键盘上的字符,整数:

int c = getch();

我想将它附加到字符串中,只要它不是return

void somefunction()
{
    std::string str = "you pressed: ";
    int c;
    while ( 1 )
    {
        c = getch();
        if ( c == 10 ) break;
        char* ch;
        sprintf(ch,"%c",c);
        str += std::string(ch);
    }
}

但是,当剩下somefunction的范围时,这会产生分段错误。我发现当调用str的dtor时,指向ch的指针不再可用。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:13)

这比你想象的容易得多:

str.push_back(c);

答案 1 :(得分:7)

您正在获得分段错误,因为您尝试将sprintf字符串转换为未知(尚未分配)的内存:

char* ch;
sprintf(ch,"%c",c);

代码的可能修复方法是将char* ch;替换为char ch[2];,这会导致ch成为具有自动存储持续时间的静态分配数组。

但请注意,由于您使用C ++进行编程,因此使用std::string而非C样式(char*)字符串和C样式函数(如{{1})的流和方法会更明智}。