在 C 中将字符串赋值给 int

Assign string to int in C

我有以下代码:

#include <stdio.h>

int main(void) {
    int i = "hello world";

    printf("%d", i);

    return 0;
}

为什么将 string 分配给 int 变量没有给我一个编译错误,而是打印出一个垃圾值。

编辑 1:

很多答案建议不要忽略警告。我在 ideone 上写了这段代码,不幸的是,它没有给我任何警告。

我相信它会执行指向 int 的指针转换。它应该是一个警告,表示转换没有强制转换。

int i = "hello world";

这样,您将内存中字符串文字 "hello world" 的地址分配给 int 对象 i,这在大多数情况下是未定义的行为,因为内存位置的值在许多情况下超出了 int 类型的对象可以容纳的区域。

这个未定义的值然后被打印:

 printf("%d", i);

尽管如此,编译器在没有显式转换的情况下应该给你一个警告,f.e。当我用 gcc 编译你的代码时,它给出了:

warning: initialization of 'int' from 'char *' makes integer from pointer without a cast [-Wint-conversion]

永远不要忽略编译器警告。