我在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";
}
答案 0 :(得分:1)
因为您定义了SIZE 5,所以您可以获得大小为4的输入,因为您将其视为以null结尾的字符串。因此,如果输入的字符多于SIZE,则CHANGE函数将尝试访问尚未分配的内存。 希望它有所帮助。
答案 1 :(得分:-2)
int main()
它对我有用。 顺便说一句,SIZE应该更高。
#define SIZE 10000