关于sting临时地址返回问题

本文探讨了指针和字符串转换中的常见问题,特别是避免使用临时变量进行int到string转换的方法,并通过具体代码示例说明如何正确处理字符串返回及复制过程中可能出现的隐患。

最近学到关于指针和字符串的转换,遇到一些返回临时变量地址的问题,记录并分享一下。下面为不使用临时变量的int转string的代码。

/*
不能使用临时变量
*/
char* Myitoa(char *str,int n)
{
	int m=n;
	int l=n;
	int i=1;
	int k=0;
	//char *p=str;//vital;

	while(l/=10)
	{
		i*=10;
	}

	while(m>0)
	{
		n/=i;
		m%=i;
		i/=10;
		*str++='0'+ n;//转成字符
		n=m;
		str++;
	}
	*str = '\0';

	return str;
}

经过总结,出错部分的代码改写为

char* s1()
{
	return "123";
}

char* s2()
{
	char c[5]="9911";
	return c;
}

int main()
{
	char str[10]={};
	strcpy(str,s2());
	//出现警告,'strcpy': This function or variable may be unsafe.
	printf("%s\n",str);//结果为9911
	puts(str);//结果为9911

	printf("%s,\n",s1());//结果为123
	printf("%s,\n",s2());//结果为123
	puts(s1());//结果为乱码
	puts(s2());//结果为乱码

	return 0;
}
由此联想到几个问题:

  1. 关于strcpy函数,为何没有地址返回的值没有被清除或修改;
  2. puts函数与printf函数,调用过程有何不同;

下面附一个关于部分问题的解释:
来自网络:http://blog.youkuaiyun.com/bigloomy/article/details/6562105


 当前函数执行完成时,相关的临时变量和参数都被清除了。不能把指向这些临时变量的指针返回给调用者,这样的指针指向的数据是随机的

会给程式造成不可预料的后果。但是指针却有所不同,指针的地址在栈上,但是它所指向的内容却是在堆上面,所以并没有被清除。




                
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值