atoi & itoa

本文介绍了一个简单的 C 语言程序,该程序实现了一个名为 my_atoi 的函数,用于将字符串转换为整数,并修复了其中的一个 bug。文章通过对比标准库函数 strtol 的使用,展示了自定义函数 my_atoi 的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
auther:yejing
data:2014.08.07
ver:1(create the file)
test pc:ubuntu 12.14
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int my_atoi(char* string){
	if(!string)
		return -1;
		
	char* tmp = string;
	int result = 0;
	int negative = 0;
	
	
	while(*tmp != '\0'){
		if( *tmp == '-' && *(tmp + 1) > '0' && *(tmp + 1) <= '9')
		{
			if(!negative) 
				negative = 1;
		}

		if(*tmp >= '0' && *tmp <= '9')
			result = result * 10 + *tmp - '0';
		else
			if(result)
				break;
			
		if(result > 0x7fffffff)
			return -1;
		
		tmp++;
	}
	
	if(negative)
		result = result * (-1);
	return result;
}

char* my_itoa(int integar){
	
}

int main(int argc, char* argv[]){
	char * str = "asdf0000-123465";
	

	printf("strtol(str):%ld \n", strtol(str, NULL, 10));
	printf("my_atoi(str):%d \n", my_atoi(str));
	
	return 1;
}
上面这份代码有个隐藏bug,修改如下:
<p>/*
auther:yejing
data:2014.08.07
ver:1(create the file)
test pc:ubuntu 12.14
*/</p><p>#include <stdio.h>
#include <stdlib.h>
#include <string.h></p><p>int my_atoi(char* string){
 if(!string)
  return -1;
  
 char* tmp = string;
 int result = 0;
 int negative = 0;
 
 
 while(*tmp != '\0'){
  if(*tmp >= '0' && *tmp <= '9')
   result = result * 10 + *tmp - '0';
  else
   if(result)
    break;
    
  if( *tmp == '-' && *(tmp + 1) > '0' && *(tmp + 1) <= '9')
  {
   if(!negative) 
    negative = 1;
  }
   
  if(result > 0x7fffffff)
   return -1;
  
  tmp++;
 }
 
 if(negative)
  result = result * (-1);
 return result;
}</p><p>char* my_itoa(int integar){
 
}</p><p>int main(int argc, char* argv[]){
 char * str = "asdf0000-123465";
 </p><p> printf("strtol(str):%ld \n", strtol(str, NULL, 10));
 printf("my_atoi(str):%d \n", my_atoi(str));
 
 return 1;
}</p>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值