简单的问题,下面是我的代码。我的编译器返回的数字是4219296.我的问题是:为什么?我的代码在这做什么?
#include <stdio.h>
char array[];
int main()
{
atoi(array);
printf("%d \n", array);
return 0;
}
答案 0 :(得分:0)
这是打印数组中起始位置的地址。如果你使用 一个指针,你将得到它的值。
printf(" %d \n",*array);
这里的atoi什么也没做。
答案 1 :(得分:0)
如果我没错,您想将包含数字值的string
转换为整数。
在您的代码中,由于char array[];
atoi()
将面临undefined behaviour。您需要将一些有效地址传递给API。
此外,不要使用atoi()
,而是使用更安全的对应strtol()
。
检查以下代码。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ip[ ] = "12345";
char *err;
long int retval;
retval = strtol(ip, &err, 0);
printf("strng format : %s, int format %ld\n", ip, retval);
return 0;
}
O / P
[sourav @ broadsword temp] $ ./a.out
字符串格式:12345,int格式12345
此外,如果您将ip
更改为char ip[ ] = "12A45";
之类的内容,则o / p将如下所示
[sourav @ broadsword temp] $ ./a.out 字符串格式:12A45,int格式12
答案 2 :(得分:0)
函数atoi
返回转换后的值。需要存储该值。在上面的程序中,您不存储返回的值。所以对数组变量没有影响。
以十进制格式打印数组可以获得数组的地址。即使没有atoi
功能,程序也应打印相同的值。要确认试试这个:
//...
printf("%d \n", array);
atoi(array);
printf("%d \n", array);
输出保持不变。