我用C++编写了一个简单的指针代码,我得到了围绕“str”的堆栈损坏的运行时错误。 我知道它会给出这个错误,如果你试图去到一个未分配的地方在一个数组中,但在这种情况下,当指针变为'\ 0',而停止。 是否可以继续在内存中指向'\ 0'的ptr? 在此先感谢! : - )用指针损坏的C++堆栈
下面的代码:
#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";
}
难道是你使用的字符串长度超过四个字符(因为零期吃了你声明的5)?你测试什么输入? – WhozCraig
你有使用字符数组而不是'std :: string'的一些要求吗?无论如何,你的'main'签名是非标准的,你认为''a''通过''z''和''A''到'Z''具有连续的字符代码,这是不能保证的。 – chris
NO NO NO NOOOOOOOOOO当你意味着常量使用STD :: STRING时,请不要使用宏定义。和一本书,得到一个BOOOOOK –