繁体   English   中英

C:为什么在printf语句后字符值会更改?

[英]C: why do the character values change after the printf statement?

我有以下代码:

struct card{
   char rank;
   char suit;
};

struct hand{
   struct card top;
   struct hand* next;
};

struct player{
   struct hand* card_list;
};


int add_card(struct player* p, struct card* new_card)
{
   struct card c = {new_card->suit, new_card->rank};
   struct hand h = {c, NULL};
   p->card_list = &h;
}

int main()
{
   struct player p;
   struct card c = {'T', 'S'};
   add_card(&p, &c);
   printf("Card is: %c%c\n\n", p.card_list->top.rank, p.card_list->top.suit);
   return 0;
}

由于某种原因,每当我尝试运行该程序时,该程序便始终是垃圾值。

输出始终为:

卡为:▒

我尝试使用gdb调试它。 在我到达printf语句之前,char值是正确的,然后它们突然更改。 我不知道为什么会这样。

以下是gdb输出:

(gdb) print p.card_list->top
$6 = {suit = 83 'S', rank = 84 'T'}
(gdb) s
78          printf("Card is: %c%c\n\n", p.card_list->top.rank, p.card_list->top.suit);
(gdb) s

Card is: ▒▒
(gdb) print p.card_list->top
$7 = {suit = -32 '\340', rank = -53 '\313'}

问题在下面的行中:-

  p->card_list = &h;

h是局部变量。 一旦功能范围结束,将释放内存。 这导致未定义的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM