0

これが私のコードです:

    void reverseStr(char *str)
{
    if (str == NULL) return;
    int i=0, j=strlen(str) -1;
    while(i<j)
    {
        char temp = str[j];  //i think this is the cause of the problem
        str[j] = str[i];
        str[i] = temp;
        i++;
        j--;
    }
}

だからここにそれが呼ばれるところです:

int main()
{   
    char *str = "Forest Gump";
    reverseStr(str);
    cout << str;
}

これが私のエラーです:

/Applications/TextMate.app/Contents/SharedSupport/Bundles/C.tmbundle/Support/bin/bootstrap.sh:7行目:1931バスエラー "$ 3" .out

何かご意見は?前もって感謝します。

4

3 に答える 3

8

Strは固定文字列を指します。あなたはそれをその場で修正しています。つまり、テキストリテラルを変更しようとしています。これを試して:

char *str = strdup("Forest Gump"); 
reverseStr(str); 
cout << str; 
free(str);
于 2010-08-16T20:31:34.897 に答える
4

文字列リテラルは読み取り専用メモリであり、未定義の動作に遭遇することなく、それらを元に戻したり、変更したりすることはできません。

最初に文字列をバッファにコピーしてから、バッファに渡します。または、ポインタの代わりに配列を宣言し、その配列を文字列初期化子で初期化します。

于 2010-08-16T20:30:29.157 に答える
0

エラーは、プログラムにないbash/シェルスクリプトにあります。bashスクリプトも投稿していただけませんか?

于 2010-08-16T20:31:20.950 に答える