1

C ++で簡単なポインタコードを記述しましたが、「str」の周りにスタック破損のランタイムエラーが発生します。配列内の割り当てられていない場所に到達しようとするとこのエラーが発生することはわかっていますが、この場合、ポインタが「\0」に到達するとwhileが停止します。それは、ptrがメモリ内で前進し続け、「\ 0」を指している可能性がありますか?前もって感謝します!:-)

コードは次のとおりです。

#include <iostream>
    using namespace std;
    #define SIZE 5
    void CHANGE(char str[]);

    void CHANGE(char str[])
    {
        char *ptr=str;
         while(*ptr!='\0')
         {
            if( ( (*ptr>='a')&&(*ptr<='z') )|| ( (*ptr>='A')&&(*ptr<='Z') ) )
             {
                 if(*ptr=='z')
                     *ptr='a';
                 else if(*ptr=='Z')
                     *ptr='A';
                 else
                    (*ptr)++;

             }

             ptr++;
         }

    }

    void main()
    {

        char str[SIZE];
        cout<<"please enter a sring\n";
        cin>>str;
        CHANGE(str);
        cout<<str<<"\n";
    }
4

2 に答える 2

1

SIZE 5を定義したため、nullで終了する文字列と見なしているため、サイズ4までの入力を取得できます。したがって、SIZEを超える文字を入力した場合、CHANGE関数は割り当てられていないメモリにアクセスしようとします。お役に立てば幸いです。

于 2013-01-07T09:56:52.963 に答える
-2
int main()

わたしにはできる。ちなみに、SIZEはもっと大きくする必要があります。

#define SIZE 10000
于 2013-01-07T09:59:10.467 に答える