c++新手的一个简单的问题,求高手指点!
#include <IOSTREAM>
#include <STRING>
using namespace std;
char* encode(char* str)
{
char c[20]="";
char* temp=c;
int i=0;
while(1)
{
if(*str=='\0') break;
c[i]=*str+1;
i++;
str++;
}
return temp;
}
void main()
{
char str[20];
cin>>str;
char* p= encode(str);
while(1)
{
if(*p=='\0')break;
cout<<*p;
p++;
}
}
================================================================================================
代码如上
为什么输入abc不能得到bcd?
输入abc,调试的时候一切正常,直到第一次的cout<<*p之前,p都还是bcd,*p也是b。
但F10之后p就直接乱掉了,导致后面的也输出不正常了,这是为什么?
另外问一下,为什么调试程序,总不能正常的关闭,shift+f5能进入vc代码编辑,但是之前的窗口和进程关不掉;如果直接在调试的时候点击小窗口关闭按钮也是关不掉的。。这该怎么办? c++
[解决办法]
char c[20]="";//一个局部数组c
char* temp=c;//指针temp指向局部数组c
return temp;//返回指针temp
char* p= encode(str);//指针p得到了指针temp的值,此后指针temp和局部数组c被销毁,由于局部数组c所在的内存现有数据尚未被新的数据覆盖,因此指针p依然能够读取到之前的值
cout<<*p;//调用了cout的operator<<函数,指针p指向的内存亦即之前局部数组c所在的内存被新的数据覆盖,具体是什么数据由函数内部代码决定
[解决办法]
char c[20]="";将这个改为:
static char c[20]="";
[解决办法]
楼主,main函数调用的函数返回的是局部变量地址的!可能不能得到真正的理想值的,
后面while(1)判断可能会一直遇不到'\0'这个结束符的,导致程序死循环了的~