linux 打印char数组,[C语言][GDB]char str[6] 最后一个是\0 : 为什么反转字符数组会没有输出?...

习题出处

使用gdb调试习题中的代码(反转字符数组),找出输出为空的原因,并修改代码。

习题解答

使得每次停下来都会显示这个变量的值 (gdb) display str 以及 (gdb) display reverse_str

如果字符数组char str[6] , 那么str[5] = \0 ,实际可以拿来存字符的是下标[0~4]

想要反转字符数组,要写成reverse_str[4-i] = str[i]; 而不是reverse_str[5-i] = str[i]; 注意这里最大下标是4

如果写成reverse_str[5-i] = str[i]; 当printf检测到reverse_str开头有\0就停止输出了,这就是为什么习题题面说的,反转输出是空

89944a67f6f4

reverse_str

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

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",

(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值