В вашем buf.mtext
(15 символов) недостаточно места для "This is a test message"
(23 символа добавляют еще один для терминатора NUL).
Я бы сказал, что есть хороший шанс, который можетповредить ваш тип или даже некоторую другую информацию в стеке (например, msqid
или length
или key
).
Является ли это реальной проблемой или нет, этовсе еще неопределенное поведение и должно быть исправлено.Первое, что я хотел бы сделать, это проверить, заменив:
strcpy(buf.mtext, "This is a test message");
на:
strcpy(buf.mtext, "XYZZY"); // 5 plus the NUL
, чтобы посмотреть, исправит ли это.* достаточно большой, чтобы хранить данные, которые вы помещаете туда.