未初始化条件 Valgrind

Uninitialized Condition Valgrind

在 运行 下面的带有 Valgrind 的 C 程序之后,它说 packets.payload 变量未初始化。但我不知道为什么,因为我已经在 packets.payload

中输入了“1234567890”
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

typedef struct packet {
    int payload_length;
    char payload[10];
} packet_t;


int main () {
    packet_t packet;
    strncpy(packet.payload, "1234567890", 10);
    puts(packet.payload);
}

指向字符串(由空字符终止的字符序列)的指针必须传递给puts() .

您的 packet.payload 不包含终止空字符,因此您不能将其用于 puts()

您可以使用 printf() 指定打印长度来打印:

printf("%.*s\n", 10, packet.payload);

packet_t packet ={0, "0000000"}是初始化。在代码中,你只是在赋值,而不是初始化。变量的初始化在构造(定义)时提供其初始值。