c-未初始化状态Valgrind



在使用Valgrind运行以下C程序后,它表示packets.payload变量未初始化。但我不明白为什么,因为我已经把";1234567890";在packets.payload

#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);
}

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

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

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

printf("%.*sn", 10, packet.payload);

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

最新更新