snprintf不会创建正确的命令

时间:2017-02-16 20:41:20

标签: c linux ubuntu

当我使用gdb调试我的程序并输入print命令时,它会打印出来:

<property name="openjpa.DetachState" value="fetch-groups(DetachedStateField=false)"/>

Normaly它应该只是将char命令创建为char?如果我是对的。这导致了另一个问题,因为popen()无法创建正确的流。

这是我的重要代码:

1 个答案:

答案 0 :(得分:2)

由于command是一个数组(不是char *),当你告诉gdb为print command时,它会打印整个内容,包括尾随NUL字符后缓冲区中的任何内容。所以当你看到:

$4 = "sudo asterisk -rx \"pjsip show aor 101\"\000\000b\006@\000\000\000\000\000p\004@\00 
                                              ^^^^ -- NUL character

它显示了snprintf放入缓冲区的内容,以及函数启动时堆栈内存中发生的任何随机内容以及为command保留的堆栈空间