【问题标题】:Preventing char * in linked list from changing防止链表中的 char * 改变
【发布时间】:2013-03-20 19:20:36
【问题描述】:

好的,所以在我的程序中,我有一个 main 函数,我在其中将字符串输入到缓冲区(char buffer[20])中。它将这个作为 char * 传递给创建链表结构的函数,将结构的 char * 值设置为等于输入文本 char *,然后返回结构指针并将其放在我的列表的前面。现在,当我输入另一个字符串来创建另一个链表结构时,它会将 BOTH 结构的 char * 值设置为我刚刚输入的文本。我怎样才能使它可以将不同的字符串存储在不同的链表结构中?

【问题讨论】:

  • 你能发布你的代码的相关sn-p吗?

标签: c linked-list char


【解决方案1】:

您可能写入同一个buffer,并且有两个char * 指向该缓冲区的指针。

您需要复制缓冲区,例如使用strdup(完成后确保释放字符串)。或者,在您的链表节点结构中将char * 替换为char [20],并将您的字符串替换为strcpy

【讨论】:

    【解决方案2】:

    问题是你放入链表的所有指针都指向完全相同的位置——你提到的char buffer[20]。每次输入新字符串时,它都会覆盖缓冲区中的旧字符串。您读取的前一个指针,过去和现在都指向字符缓冲区,现在指向最近读取的字符串。

    解决方法是将strdup缓冲区,并将strdup的结果存储在链表中。这将复制字符串(因此得名),使用从heap 分配的空间,因此每个字符串都有自己的内存。

    当你完成它们时,不要忘记最终free strdup 返回的每个字符串!

    【讨论】:

      猜你喜欢
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多