1

C++でnullで終了する文字列を元に戻そうとしています。私は以下のコードを書きました:

//Implement a function to reverse a null terminated string

#include<iostream>
#include<cstdlib>

using namespace std;
void reverseString(char *str)
{
    int length=0;
    char *end = str;
    while(*end != '\0')
    {
        length++;
        end++;
    }
    cout<<"length : "<<length<<endl;
    end--;

    while(str < end)
    {

        char temp = *str;
        *str++ = *end;
        *end-- = temp; 


    }

}
int main(void)
{
    char *str = "hello world";
    reverseString(str);
    cout<<"Reversed string : "<<str<<endl;
}

ただし、このC ++プログラムを実行すると、ステートメントのwhileループ内で書き込みアクセス違反が発生します。*str = *end ;

これはかなり単純ですが、このエラーが発生する正確な理由を理解できないようです。

エラーを特定するのを手伝ってもらえますか?

4

1 に答える 1

5
char *str = "hello world";

文字列リテラルへのポインタであり、変更できません。文字列リテラルは読み取り専用メモリに存在し、それらを変更しようとすると、未定義の動作が発生します。あなたの場合、クラッシュ。

これは明らかに課題なので、std::stringこれらのことを学ぶのは良いことなので、代わりに使用することはお勧めしません。使用する:

char str[] = "hello world";

そしてそれは動作するはずです。この場合、strは自動ストレージ(スタック)変数になります。

于 2012-09-07T09:13:54.387 に答える