In meinem Programm öffne ich eine Datei und schreibe "Hallo Welt" darin. Ich verwende snprintf(), um 'fname' Variable zu füllen. Danach setze ich gdb auf a.out und drucke die Zeichenkette 'fname'. Ich sehe, dass es in der Zeichenfolge 'fname', die ich nicht zugewiesen habe, eine Menge extra Zeichen gibt. Woher kommen diese zusätzlichen Charaktere? Könnte jemand bitte helfen?Warum schreibt snprintf() zusätzliche Zeichen?
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 Ausgang:
(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
Danke.
Debugger zeigt Ihnen alle '100' Zeichen, die für' fname' Array zugewiesen sind - unabhängig davon, ob Sie ihnen etwas zugewiesen haben oder nicht – mvidelgauz
Sie haben 'snprintf' ausdrücklich angewiesen, 100 Zeichen in' fname' zu erzeugen. Es hat genau das getan. – Koshinae
@Koshinae Nein. Das Größenargument in 'snprintf' bedeutet, dass es" höchstens ** schreibt ** Größe Bytes " – cnicutar