c - 未初始化的 C 结构字段

标签 c struct field undefined-behavior

尝试访问 C 中未初始化的结构体字段是否被视为未定义行为?

struct s { int i; };
struct s a;
printf("%d", a.i);

最佳答案

取决于变量的存储持续时间:

struct
{
    int a;
    int b;
}c;

int main()
{

    struct 
    {
        int a;
        int b;
    }e;

    static struct 
    {
        int a;
        int b;
    }s;

    printf("%d", c.a);    // <- correct no UB
    printf("%d", s.a);    // <- correct no UB
    printf("%d", e.a);    // <- UB 
}

结构cs具有静态存储持续时间,并且它们始终被初始化。如果程序员没有显式地初始化它们,它们将被归零。

结构e具有自动存储期限,如果程序员未显式初始化,则不会归零

关于c - 未初始化的 C 结构字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56192942/

相关文章:

object - 在 C# 中从 Struct 调用属性

c - Windows 中的语言环境列表

c++ - 通过 TCP/IP 以太网发送数值数据

c - C 中的结构体与数组问题

c - 为什么 "unused attribute"为结构数组生成警告?

java - 在子类中隐藏父类(super class)的字段

c - 使用压缩时出现缓冲区错误

c - 查找最小和最大问题时STRCPY和STRCMP的问题

c - 如何在函数内 malloc 结构体数组?代码以其他方式工作

python - 为 Scapy 支持的字段查找字段大小(以字节为单位)