在我的程序中,我打開一個文件並在其中寫入「Hello world」。我正在使用snprintf()來填充'fname'變量。在此之後,我把gdb放在a.out上並打印字符串'fname'。我看到字符串'fname'中有很多額外的字符,我沒有分配。這些額外角色來自哪裏?任何人都可以幫忙嗎?爲什麼snprintf()會寫入額外的字符?
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\[email protected]\000\000\000\000\000\063\[email protected]\000\000\000\000\000\001\000\000\000\000\000\301\000'\[email protected]", '\000' <repeats 13 times>"\300, \313Ab:\000\000\000\360\[email protected]", '\000' <repeats 13 times>"\260, \343\377\377"
(gdb) q
謝謝。
調試器顯示所有分配給'fname'數組的'100'字符 - 無論您是否指定了某些東西 – mvidelgauz
您明確告訴'snprintf'可以在'fname'中產生100個字符。它確實如此。 – Koshinae
@Koshinae號'snprintf'中的size參數意味着它將「最多寫入** **大小字節」 – cnicutar