gpt4 book ai didi

c - 为什么 snprintf() 会写额外的字符?

转载 作者:太空宇宙 更新时间:2023-11-04 05:24:23 25 4
gpt4 key购买 nike

在我的程序中,我打开一个文件并在其中写入“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com