在我的程序中,我打开一个文件并在其中写入“Hello world”。我正在使用 snprintf() 来填充“fname”变量。在此之后,我将 gdb 放在 a.out 上并打印字符串“fname”。我看到字符串“fname”中有很多我没有分配的额外字符。这些额外的字符来自哪里?有谁能帮忙吗?
3 int main(void)
4 {
5 FILE *debug_fp = NULL;
6 char fname[100];
7
8 snprintf(fname, 100, "./my_debug_%d", getpid());
9 debug_fp = fopen(fname, "w");
10 fprintf(debug_fp, "%s", "Hello world");
11 return 0;
12 }
gdb 输出:
(gdb) b test.c:10
Breakpoint 1 at 0x4005be: file test.c, line 10.
Breakpoint 1, main () at test.c:10
10 fprintf(debug_fp, "%s", "Hello world");
(gdb) p fname
$1 = "./my_debug_16178\000\000\000\000\000\000\000\000\300\313Ab:\000\000\000\360\005@\000\000\000\000\000\063\004@\000\000\000\000\000\001\000\000\000\000\000\301\000'\006@", '\000' <repeats 13 times>"\300, \313Ab:\000\000\000\360\005@", '\000' <repeats 13 times>"\260, \343\377\377"
(gdb) q
谢谢。
最佳答案
在这种情况下,gdb 不关心字符串中的 0 终止符,只打印数组,即 fname
中的完整 100 个字符。
如果您希望 gdb 将您的数组视为 C 字符串,您也可以使用 printf "%s"
或 p/s
。
关于c - 为什么 snprintf() 会写额外的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38244821/