/*
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>