0

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

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但是,当留下范围时,这会产生分段错误。我猜想当 dtor forstr被调用时,指向的指针ch不再可用。

我该如何补救?

4

2 回答 2

13

这比你想象的要容易得多:

str.push_back(c);
于 2012-06-12T11:35:59.810 回答
7

您遇到分段错误,因为您试图sprintf串入未知(尚未分配)的内存:

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

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

但请注意,由于您使用 C++ 进行编程,因此使用流和方法std::string而不是 C 风格 ( char*) 字符串和 C 风格函数(如sprintf.

于 2012-06-12T11:39:12.123 回答