谁能解释一下atoi的实现?
请先看如下程序:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char *
getnumber1(void);
void
getnumber2(char *);
int main()
{
int i = 0;
char w[20];
i = atoi(getnumber1());
printf("getnumber1 = %d\n", i);
i = 0;
getnumber2(w);
i = atoi(w);
printf("getnumber2 = [%s]\n", w);
printf("getnumber2 = %d\n", i);
return 0;
}
char *
getnumber1(void)
{
char w[20];
char *p;
int c;
p = w;
while (isspace(c = getchar()))
;
if (c != EOF)
*p++ = c;
for (;;) {
if (isspace(c = getchar())) {
ungetc(c, stdin);
break;
}
*p++ = c;
}
*p = '\0';
printf("getnumber1 = [%s]\n", w);
return w;
}
void
getnumber2(char *w)
{
char *p;
int c;
p = w;
while (isspace(c = getchar()))
;
if (c != EOF)
*p++ = c;
for (;;) {
if (isspace(c = getchar())) {
ungetc(c, stdin);
break;
}
*p++ = c;
}
*p = '\0';
return;
}
这个小代码没有考虑各种边界情况和错误处理。
用bc++5.5的编译器编译后,运行。
输入和输出如下:
D:\c\scan>getnum
12
getnumber1 = [12]
getnumber1 = 1
12
getnumber2 = [12]
getnumber2 = 12
请问为什么getnumber1读入的char*为12,但是atoi的结果却是1?
同时,getnumber2读入的也是12,atoi的结果是对的。