c - 未初始化字符数组的 %d 说明符

标签 c arrays

#include <stdio.h>

int main()
{   
    char a[8];    
    printf("%d\n",a) ;    
    return 0;    
}

对于上面的代码,输出是这样的:- 2686744

此输出背后的原因是什么? 我发现输出不依赖于数组的内容,而是依赖于数组的大小。我只是想要解释。

最佳答案

char a[8];    
printf("%d\n",a);

这段代码有未定义的行为。

数组表达式a被隐式转换为char*值,相当于&a[0]。然后将该值传递给 printf——但由于 %d 格式需要一个 int 参数,因此行为未定义。

如果 intchar* 恰好具有相同的大小,并且如果它们使用相同的机制作为函数参数传递,那么它可能会打印一个小数数组(的初始元素)地址的表示。

但是不要那样做。如果要打印地址:

printf("%p\n", (void*)a);

关于c - 未初始化字符数组的 %d 说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35027411/

相关文章:

c - C 中长数计算的错误答案

C: TCP 服务器没有收到整个消息

ios - 如何使用 CNContacts 快速获取手机号码?

c - 使用指针对 C 中的结构数组进行排序

c++ - 警告 : address of local variable 'angles' returned [-Wreturn-local-addr]

c - 在 BIOS 级程序集中读取输入?

c - Visual Studio 和c

c - 陷入 Vigenere 加密程序的最后部分

php - 在 PHP 中读写数组?

java - 将通用列表转换为通用数组