为什么我的结构中的 char 数组即使分配结构也是空的?

Mat*_*eus 0 c malloc struct pointers

我有以下结构:

struct scp_header {
    char state_name[NAME_MAXSIZE];
    enum scp_packet_type type;
    size_t payload_size;
    size_t script_size;
};
Run Code Online (Sandbox Code Playgroud)

我想在几个函数中使用这个结构,但我需要做的第一件事是填充字段state_name,为了做到这一点,我的函数的一部分执行以下操作:

struct scp_header *header;

if ((header = malloc(sizeof(struct scp_header)) == NULL))
    return -1;

if (header->state_name == NULL)
    printf("This field is NULL\n");
header->type = INIT;
header->payload_size = 0;
header->script_size = total_code_size;
Run Code Online (Sandbox Code Playgroud)

我做了上面的验证,因为当我尝试使用时,strncpy(header->state_name, "sometext", NAME_MAXSIZE)我遇到了分段错误。所以我决定检查该state_name字段是否不是 NULL 并且我真的进入了 if 语句,该语句表明该字段是NULL.

我的问题是:为什么这个字段是NULL如果我分配了整个结构,它应该malloc为那个字段分配必要的内存,不是吗?

vmt*_*vmt 6

(Ab) 以这种方式使用括号非常危险,因为您很容易绊倒。

if ((header = malloc(sizeof(struct scp_header)) == NULL))

在这里,将 malloc 调用的结果与NULL(运算符优先级,== 的优先级高于 =)进行比较。当 malloc 成功时,它返回一个非 NULL 值,上述比较结果为 0,然后将其分配给header。if 语句检查header并且只会在header非零时返回。

使固定: if ((header = malloc(sizeof(struct scp_header))) == NULL)

但我强烈建议您考虑更清晰的样式。