一段关于atoi()函数的转换问题
#include <stdlib.h>
#include <stdio.h>
int main()
{
char a[] = "-100" ;
char b[] = "123" ;
int c ;
c = atoi( a ) + atoi( b ) ;
printf("c = %d\n", c) ;
return 0;
}
执行结果 c = 23
问题:为什么会是 c=23,而不是c=123呢?我个人认为在c = atoi( a ) + atoi( b ) ;中,atoi(a)=0,atoi(b)=123,所以
c=123,不知道我的答案对不对?
[解决办法]
你为什么会认为是 0 呢?
如果 atoi() 函数连个正负号都识别不出来, 这函数也太那个了......
你可以看看 atoi() 函数或者 atol() 的源代码. 里面有判断正负号的语句.
[解决办法]
一楼讲的是正确的,正负号有判断的。
[解决办法]
你既然已经赋值.怎么会是0呢.
[解决办法]
C语言库函数名: atoi
功 能: 把字符串转换成整型数.
名字来源:array to integer 的缩写.
原型: int atoi(const char *nptr);
函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。
[解决办法]
lz 认为应该是多少?
为了一个函数,要更改千年来大家的共识吗?
[解决办法]
#include <cctype> int my_atoi(const char* p){ assert(p != NULL); bool neg_flag = false;// 符号标记 int res = 0;// 结果 if(p[0] == '+' || p[0] == '-') neg_flag = (*p++ != '+'); while(isdigit(*p)) res = res*10 + (*p++ - '0'); return neg_flag ? -res : res; }
[解决办法]
char a[] = "-100";//这样就会是0 (^_^)