У меня возникают некоторые проблемы при возврате с printf
массива char из структуры в C.
struct q_entry
{
long mtype;
char mtext[MAXLENGTH + 1];
};
long mtype
из структуры возвращается нормально, но строка только возвращаетсянекоторые странные персонажи.
int proc_obj(struct q_entry *msg)
{
printf("\npriority: %ld name: %s\n", msg->mtype, msg->mtext);
}
Он просто возвращает некоторые странные символы, такие как "приоритет: 1 имя: ▒▒ (" а не "приоритет: 1 имя: привет"
Язаполнение структуры с использованием следующего кода
int enter(char *objname, int priority)
{
...
strncpy(s_entry.mtext, objname, sizeof(s_entry.mtext) - 1);
s_entry.mtype = priority;
// Send the message
if (msgsnd(s_qid, &s_entry, len, 0) == -1)
{
printf("error: msgsnd failed\n");
return(-1);
}
else
{
return(0);
}
}
У меня нет большого опыта работы с C, поэтому я не слишком разбираюсь в использовании структур. Пожалуйста, дайте мне знать, если больше контекста или частей коданужна любая помощь.
Я добавил немного больше кода в Enter выше, а вот еще код, когда enter и proc_obj называются
main(int argc, char **argv)
{
int priority;
if (argc != 3)
{
printf("error: incorrect number of arguments\n");
exit(1);
}
else
{
priority = atoi(argv[2]);
}
if (enter(argv[1], priority) < 0)
{
printf("error: message entering failed\n");
exit(1);
}
exit(0);
}
Это файл, отличный от кода ввода и выше
int server(void)
{
int mlen, r_qid;
struct q_entry r_entry;
// Initialize queue
if ((r_qid = init_queue()) == -1)
return(-1);
for (;;)
{
if ((mlen = msgrcv(r_qid, &r_entry, MAXLENGTH, (-1 * MAXPRIOR), MSG_NOERROR)) == -1)
{
printf("error: msgrcv failed\n");
exit(1);
}
else
{
proc_obj(&r_entry);
}
}
}