未初始化条件 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"}
是初始化。在代码中,你只是在赋值,而不是初始化。变量的初始化在构造(定义)时提供其初始值。
在 运行 下面的带有 Valgrind 的 C 程序之后,它说 packets.payload
变量未初始化。但我不知道为什么,因为我已经在 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);
}
指向字符串(由空字符终止的字符序列)的指针必须传递给puts()
.
您的 packet.payload
不包含终止空字符,因此您不能将其用于 puts()
。
您可以使用 printf()
指定打印长度来打印:
printf("%.*s\n", 10, packet.payload);
packet_t packet ={0, "0000000"}
是初始化。在代码中,你只是在赋值,而不是初始化。变量的初始化在构造(定义)时提供其初始值。