【问题标题】:String not storing in a structure properly字符串未正确存储在结构中
【发布时间】:2011-07-13 18:59:24
【问题描述】:
typedef struct class {
   char* CLASS_ID;
   char* CLASS_NAME;
}

什么会导致这两个字符串在 30-40 行不相关的代码中丢失它们的值? (分配给从名为 getString() 的函数返回的指针)。

【问题讨论】:

  • CLASS_ID 和 CLASS_NAME 的返回值如果在使用 getString() 调用初始化它们之后打印出来,它们是否仍然是它们应有的值?如果在第二次调用后它们不正确,那么您可能在 getString() 中遇到问题。让我知道你发现了什么,我们可以从那里开始。
  • 如果您无法通过阅读代码来解决问题,您的调试器会告诉您哪些代码正在写入内存。

标签: c string memory struct storage


【解决方案1】:

也许 getString() 返回一个指向静态分配缓冲区的指针,每次调用它的值都会被覆盖?

也许您正在溢出一个数组并破坏您的堆栈或堆?

也许您正在存储一个指向在堆栈上分配并超出范围的字符串的指针?

有了更多关于 getString() 的信息或代码,有人可能会给你一个明确的答案。

【讨论】:

  • 当。用相同的答案击败我不到一分钟。无论如何,我有一个个人规则,任何这样做并且与我有相同答案的人都是一个明显的天才,所以为你 +1。 :-)
【解决方案2】:

好吧,不知道getString() 是如何实现的,或者您的任何其他代码,它可能是任何东西。这是 C (过度)使用指针的问题的一部分。

我的第一个猜测是 getString() 实际上返回一个指向内部 (static) 字符串的指针,因此每次调用都会删除从最后一次检索到的值。

如果您实际上使用的是 C++,那么我强烈建议您放弃此代码并改用 std::string。我敢打赌你的问题会神奇地消失。

【讨论】:

    【解决方案3】:

    除了其他人在此处发布的内容之外,您还应该避免使用 classCLASS_IDCLASS_NAME 之类的名称,因为它们在许多库中都是 #defined,您可能会在未来包含这些名称并调试数小时才能找到找出突然出现的问题。

    【讨论】:

      猜你喜欢
      • 2013-11-04
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 2017-02-11
      • 2017-09-04
      • 2017-08-26
      相关资源
      最近更新 更多