【问题标题】:Issue debugging c strings? [duplicate]问题调试 c 字符串? [复制]
【发布时间】:2013-01-01 22:36:45
【问题描述】:

我有一些 c 代码来连接一个字符串。

char str_cat[strlen(str1) + strlen(str2) + 1];

如何在 gdb 中检查 str_cat 的大小?现在它报告 0:

print sizeof(str_cat)

它确实打印了字符串,但我如何打印它以显示空字符?

让我改写一下,我如何验证 str_cat 的大小是否合适并且有足够的空间?

【问题讨论】:

  • 隐含终止 NUL。它不会自动打印它。如果您非常想要它,您可以将theString[strlen(theString)] 打印为整数。应该是0
  • 它不会显示空字符,因为空字符看起来不像任何东西。 str_cat 是一个函数吗?它不应该是 char * 在这种情况下 sizeof 不会工作,因为它只会返回指针的大小吗?
  • @Ben str_catchar 的数组。如果调试器知道它是一个数组,那么它将正确显示大小。
  • str_cat 是可变长度数组。显然gdb 不知道如何处理 VLA。
  • 抱歉,我不明白,您是在声明一个深度基于 strlen(运行时间)的字符数组(代码时间)?

标签: c string gdb


【解决方案1】:

char str_cat[strlen(str1) + strlen(str2) + 1];

如何在 gdb 中检查 str_cat 的大小?现在它报告 0:

str_cat 是一个可变长度数组。显然gdb 不怎么处理变长数组。

这里有一张关于这个问题的公开票: http://sourceware.org/bugzilla/show_bug.cgi?id=9663

它提到了一个现有的补丁,但至少我的2012 版本7.4gdb 不包括它。

【讨论】:

    【解决方案2】:

    要解决 GDB 中的错误,请先将大小存储在单独的变量中,然后将大小存储在单独的变量中,例如:

    int len = strlen(str1) + strlen(str2) + 1;
    char str_cat[len];
    

    char str_cat[strlen(str1) + strlen(str2) + 1;
    size_t len = sizeof str_cat;
    

    然后在 GDB 中打印len

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 1970-01-01
      • 2010-12-07
      相关资源
      最近更新 更多