打印未初始化阵列的atoi值

时间:2014-12-08 10:30:15

标签: c arrays atoi

简单的问题,下面是我的代码。我的编译器返回的数字是4219296.我的问题是:为什么?我的代码在这做什么?

#include <stdio.h>
char array[];

int main()
{

atoi(array);
printf("%d \n", array);


return 0;

}

3 个答案:

答案 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);

输出保持不变。