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

标签 c

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

相关文章:

谁能告诉我这有什么问题吗?

将 14 位转换为 8 位并返回

C 初学者 - 指针

c++ - C 等价于 C++ 指针密集型例程

c - malloc 函数在 C 中如何工作?

来自不兼容指针类型的 C 指针数组赋值

c - 第二次使用 sqlite3_prepare_v2 时 SQLite 崩溃

c - 无符号短整型到无符号长整型的赋值

尝试在 freebsd 中编译系统调用 .c 文件时出现冲突错误

c - 是否可以将变量从一个进程传递到另一个进程?