在 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]
永远不要忽略编译器警告。
我有以下代码:
#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]
永远不要忽略编译器警告。