[C语言][GDB]char str[6] 最后一个是\0 :

2020-05-20  本文已影响0人  AkuRinbu

习题出处

《Linux C编程一站式学习》 第10章 gdb 断点https://akaedu.github.io/book/ch10s02.html

习题解答

anno@vm:~$ vim 
anno@vm:~$ vim e.c
anno@vm:~$ gcc -g e.c -o e
anno@vm:~$ ./e
hello
olleh
anno@vm:~$ gdb e

(gdb) start
Temporary breakpoint 1 at 0x1169: file e.c, line 4.
Starting program: /home/anno/e 

Temporary breakpoint 1, main () at e.c:4
4   {
(gdb) i b
No breakpoints or watchpoints.
(gdb) l
1   #include <stdio.h>
2   
3   int main(void)
4   {
5       int i;
6       char str[6] = "hello";
7       char reverse_str[6] = "";
8   
9       printf("%s\n", str);
10      for (i = 0; i < 5; i++)
(gdb) 
11          reverse_str[4-i] = str[i];
12      printf("%s\n", reverse_str);
13      return 0;
14  }


(gdb) b 9
Breakpoint 2 at 0x55555555519e: file e.c, line 9.
(gdb) display str
1: str = "UU\000\000\320", <incomplete sequence \337>
(gdb) display reverse_str
2: reverse_str = "\377\377\377\177\000"
(gdb) c
Continuing.

Breakpoint 2, main () at e.c:9
9       printf("%s\n", str);
1: str = "hello"
2: reverse_str = "\000\000\000\000\000"


(gdb) n
hello
10      for (i = 0; i < 5; i++)
1: str = "hello"
2: reverse_str = "\000\000\000\000\000"
(gdb) 
11          reverse_str[4-i] = str[i];
1: str = "hello"
2: reverse_str = "\000\000\000\000\000"
(gdb) 
10      for (i = 0; i < 5; i++)
1: str = "hello"
2: reverse_str = "\000\000\000\000h"
(gdb) 
11          reverse_str[4-i] = str[i];
1: str = "hello"
2: reverse_str = "\000\000\000\000h"
(gdb) 
10      for (i = 0; i < 5; i++)
1: str = "hello"
2: reverse_str = "\000\000\000eh"
(gdb) 
11          reverse_str[4-i] = str[i];
1: str = "hello"
2: reverse_str = "\000\000\000eh"
(gdb) 
10      for (i = 0; i < 5; i++)
1: str = "hello"
2: reverse_str = "\000\000leh"
(gdb) 
11          reverse_str[4-i] = str[i];
1: str = "hello"
2: reverse_str = "\000\000leh"
(gdb) 
10      for (i = 0; i < 5; i++)
1: str = "hello"
2: reverse_str = "\000lleh"
(gdb) 
11          reverse_str[4-i] = str[i];
1: str = "hello"
2: reverse_str = "\000lleh"
(gdb) 
10      for (i = 0; i < 5; i++)
1: str = "hello"
2: reverse_str = "olleh"
(gdb) 
12      printf("%s\n", reverse_str);
1: str = "hello"
2: reverse_str = "olleh"
(gdb) quit
A debugging session is active.

    Inferior 1 [process 29502] will be killed.

Quit anyway? (y or n) y

上一篇 下一篇

猜你喜欢

热点阅读