我用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 –