gpt4 book ai didi

c - 从 C 中的结构返回 char 数组时出现奇怪的字符

转载 作者:太空宇宙 更新时间:2023-11-04 07:38:21 25 4
gpt4 key购买 nike

当从 C 中的结构返回 char 数组的 printf 时,我遇到了一些问题。

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

它只是返回一些奇怪的字符,比如 "priority: 1 name: ▒▒("而不是 "priority: 1 name: hello"

我正在使用以下代码填充结构

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

最佳答案

您的代码中唯一明显的错误是您应该在 s_entry.mtext[MAXLENGTH] 处显式填充零,这样如果 strncpy() 达到限制,字符串仍将以零终止。但如果那是问题所在,您会看到“hello”后跟 奇怪的字符。您确定 objname 指向您期望它指向的文本吗?

另外,proc_obj() 被声明为返回一个 int 但实际上没有返回任何东西,这看起来有点奇怪。你的编译器应该对此提示。

关于c - 从 C 中的结构返回 char 数组时出现奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6970009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com