【发布时间】:2012-10-31 10:11:18
【问题描述】:
我正在尝试使用 printf 在名为 point_person 的指针内打印出一个字符数组,当我使用它来返回用户的名字时,它会打印出很多垃圾,然后最后打印出名称。
代码看起来像这样:
person dequeue_person;
person *point_person = &dequeue_person;
get_person(point_person, 9);
printf("%s", point_person->first_name);
person 是一个 typedef 结构,包含 3 个字符变量:first_name[64]、last_name[64]、pes_nbr[64]。
输出如下:
F÷rn:约翰 ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠约翰
这是什么原因造成的,以后如何避免这种情况?
编辑: 填充 first_name 的代码如下所示:
void get_person(person *pers, int index)
{
person per_son;
strcpy(per_son.first_name, queue[(index+head)%QUEUE_MAX_SIZE].first_name);
strcpy(per_son.last_name, queue[(index+head)%QUEUE_MAX_SIZE].last_name);
strcpy(per_son.pers_nbr, queue[(index+head)%QUEUE_MAX_SIZE].pers_nbr);
pers = &per_son;
printf("Förnamn: %s\n", per_son.first_name);
}
编辑 2: 我自己想出来的。我不得不编辑 get_person 函数并删除 per_son 结构并将 strcpy 更改为 pers 而不是 pers_son。
【问题讨论】:
-
在发布的代码中,
first_name永远不会被填充。你能发布填充它的代码吗? -
╠ 在代码页 437 中为 0xCC,MSVC fills 0xCC to uninitialized memory to help debugging。这意味着您访问了未初始化的内存。你可以在这里找到关于 ╠ 和 0xCC 的大量问题