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

rom*_*ovs 0 c++ string pointers scope append

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

int c = getch();
Run Code Online (Sandbox Code Playgroud)

我想将它附加到字符串只有它不是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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当somefunction剩下范围时,这会产生分段错误.我正在考虑当str调用dtor for时,指针ch不再可用.

我该如何解决这个问题?

Jam*_*lin 13

这比你想象的容易得多:

str.push_back(c);
Run Code Online (Sandbox Code Playgroud)

  • @Nawaz是什么让你这么说的? (3认同)

Lih*_*ihO 7

你正在获得分段错误,因为你试图sprintf串入未知(尚未分配)的内存:

char* ch;
sprintf(ch,"%c",c);
Run Code Online (Sandbox Code Playgroud)

你的代码的可能修复将是替换char* ch;char ch[2];哪个将导致ch成为具有自动存储持续时间的静态分配的数组.

但请注意,由于您使用C++编程,因此使用流式和方法std::string而不是C-style(char*)字符串和C风格函数更为明智sprintf.