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,所以您可以获得最大 4 的输入,因为您将其视为以空值结尾的字符串。因此,如果您输入的字符多于 SIZE,您的 CHANGE 函数将尝试访问尚未分配的内存。希望它有所帮助。

于 2013-01-07T09:56:52.963 回答
-2
int main()

这个对我有用。顺便说一句,SIZE 应该大得多。

#define SIZE 10000
于 2013-01-07T09:59:10.467 回答