用C语言实现将int类型转化为字符串,不使用已有的转换函数

昨天面试腾讯,让用C语言实现将int类型转化为字符串,不使用已有的转换函数。

写代码的过程中出现了许多错误,记录一下,函数原型是面试官给出的。(原型的一些缺陷应该是面试官设的陷阱,我自己太弱都掉进去了。。。)

实现代码如下

#include <stdio.h>
#include <math.h>
#define INT_MAX 2147483647
#define INT_MIN (-2147483647-1)//必须是这种表示形式,-2147483648会报错

const char* int_to_str(int iVal)
{
	static char str[12];
	int isNegative = 0;
	int i = 0,j=0;
	if (iVal == 0)
	{
		str[0] = '0';
		str[1] = '\0';
		return str;
	}
	if (iVal == INT_MIN)
	{
		int_to_str(iVal + 1);
		char *tmp = str;
		while (*tmp != '\0')
			tmp++;
		tmp--;
		*tmp += 1;
		return str;
	}
	if (iVal < 0)
	{
		iVal *= -1;
		isNegative = 1;
		str[i++] = '-';
		j++;
	}
	while (iVal)
	{
		str[i++]=iVal % 10+'0';
		iVal /= 10;
	}
	str[i--] = '\0';
	while (j < i)
	{
		char ch = str[i];
		str[i--] = str[j];
		str[j++] = ch;
	}
	return str;

}

int main(void)
{
	printf("%s ", int_to_str(2147483647));
	printf("%s ", int_to_str(-2147483647-1));
	return 0;
}
自己的思考:因为原型给的返回类型为char* ,若在程序里直接定义为char * str, 函数返回后str指向的内存会被释放,str指向的内容将是无意义的,因此应把它设为static。但此时每次调用printf("%s %s ", int_to_str(123), int_to_str(-123));输出结果将是123 123,因为它们返回str是一个地址,参数从右往左计算,最后str存的值就是123,因此这种实现方式有缺陷。当使用malloc分配内存时,printf("%s ", int_to_str(2147483647));后分配的内存没有被free,造成资源泄漏。

因此在实现这种函数的原型时,应用itoa函数原型的形式,把存的地址传进去,char *itoa( int value, char *string,int radix);

原型说明:

value:欲转换的数据。

string:目标字符串的地址。

radix:转换后的进制数,可以是10进制、16进制等。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值