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);

コードの可能な修正は、自動ストレージ期間を持つ静的に割り当てられた配列になる原因となる whichchar* ch;を置き換えることです。char ch[2];ch

ただし、C++ でプログラミングしているので、 C スタイルの ( ) 文字列や のような C スタイルの関数std::stringよりも、ストリームとメソッドを使用する方が賢明であることに注意してください。char*sprintf

于 2012-06-12T11:39:12.123 に答える