#c #initialization #structure #valgrind
#c #инициализация #структура #valgrind
Вопрос:
После запуска следующей C-программы с Valgrind она сообщает 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);
}
Ответ №1:
Необходимо передать указатель на строку (последовательность символов, заканчивающуюся нулевым символом) puts()
.
Ваш packet.payload
не содержит завершающего нулевого символа, поэтому вы не можете использовать его для puts()
.
Вы можете использовать printf()
с указанием длины для печати, чтобы распечатать это:
printf("%.*sn", 10, packet.payload);
Ответ №2:
packet_t packet ={0, "0000000"}
является инициализацией. В коде вы просто присваиваете значение, а не инициализируете. Инициализация переменной обеспечивает ее начальное значение во время построения (определения).