/**
* 整数转换成字符串
* 作者:xjp
*/
char* NumtoString(int num){
int i=0,j=0;
char temp[10],str[10];
char *p=str;
while(num){
temp[i]=num%10+'0';
num=num/10;
i++;
}
temp[i]='\0';
i=i-1;
while(i>=0){
str[j]=temp[i];
j++;
i--;
}
str[j]='\0';
return p;
}
调试程序可以看到p与str地址都是0x28fea8,但是当调用此函数后指针指向的内存值(内存中的栈)会随时发生变化。
/**
* 整数转换成字符串
* 作者:xjp
*/
int main(){
int num = 1234;
char *s = NumtoString(num);
printf("s=%s ",s);
return 0;
}
打印的结果不是1234。
当调用这个指针函数NumtoString,不能得到预期的结果:原因是违背了函数的栈帧机制。分配内存有一句话叫做“一旦使用,它即改变”。
修改一个地方staticchar temp[10],str[10];
/**
* 整数转换成字符串
* 作者:xjp
*/
char* NumtoString(int num){
int i=0,j=0;
static char temp[10],str[10]; //改为static
char *p=str;
while(num){
temp[i]=num%10+'0';
num=num/10;
i++;
}
temp[i]='\0';
i=i-1;
while(i>=0){
str[j]=temp[i];
j++;
i--;
}
str[j]='\0';
return p;
}
调试程序可以看到p与str地址都是0x407020,这与0x28fea8不是一个存储块,0x407020是普通数据段(静态存储区)
问题:还可以怎样改动?