>第 10 章 gdb>断点>习题

wusu0pubupt wdxbupt2009@gmail.com
2002-10-06 20:00:34

string !


WPJ lonependulm@gmail.com
2010-01-20 21:54:09

10.1的请点我是404.


宋劲杉 songjinshan@akaedu.org
2010-01-21 14:44:25

已修复,谢谢!


laciqs 530107999@qq.com
2010-04-30 15:52:11

您这里是:
$ ./main 
hello
实体书上的hello的第一个字母却给大写了,而上面的代码中的还是小写的,有点让人摸不着头脑。。。。。。


bowen zhangbowen_06@126.com
2010-05-06 17:52:27

#include <stdio.h>

int main(void)
{
        char str[6] = "hello";
        char reverse[6] = "";

        int i;
        for(i = 0; str[i] != '\0'; i++){
                reverse[5-i] = str[i];
        }

        int j;
        for(j = 0;j < 6;j++){
                printf("%c",reverse[j]);
        }
        printf("\n");
        return 0;
}
这个好像是对的啊:输出结果是。。。
olleh


宋劲杉 songjinshan@gmail.com
2010-05-11 08:44:16

to bowen: 没错,这么写输出结果是对的。但你没找出原题的程序为什么输出结果错


宋劲杉 songjinshan@gmail.com
2010-05-11 09:39:12

to laciqs:实体书上排版引入的错误。实体书出自编辑之手,此类问题已经让我十分恼火了,我对只出现在实体书上的错误概不负责。


ivan stamtotti@163.com
2010-05-28 09:50:50

#include <stdio.h>

int main(void)
{
        int i;
        char str[6] = "hello";
        char reverse_str[6] = "";

        printf("%s\n", str);
        for (i = 0; i < 5; i++)
                reverse_str[4-i] = str[i];
        printf("%s\n", reverse_str);
        return 0;
}

原题中reverse_str[0]并没有被赋值,还是'\0',所以打印错误


flyingchen flyingmain@gmail.com http://chenfei.me/
2010-09-08 11:17:58

for(i=0;i<6;i++)
{
                printf("%d:%c\n", i,reverse_str[i]);
}
通过这样的输出,可以发现reverse_str[0]为'\0',上面已经有同学说了。由于printf遇到'\0'表示字符串末尾,所以其将reverse_str[5]做为了字符串头,所以输出了hello这样的结果


sd44 sd44sd44@yeah.net
2010-10-22 00:54:50

通过GDB调试,发现前方有多个 \0

经修改 for (i = 0; i < 6; i++)
                    reverse_str[4 - i] = str[i];

成功


rufeng newingc@gmail.com http://www.xin-e.cc/
2011-01-04 22:59:12

用gdb的display reverse_str。可以看到每一步的值。最终reverse_str的值是
"\000olleh"。

对C语言的字符串结束符表示困惑!!!

我换个角度去替换:
for (i = 0 ; i < 5; i++)
	reverse_str[i] = str[4-i];

这样子,好像结果是预期想要的。






xiao 125385300@qq.com
2011-06-15 07:24:22

宋老师,我在执行完reverse_str[4] = str[1]后,再运行
continue语句,提示Program exited normally.的错误,自动停止了,何解?


caozhijie czj627@126.com
2012-01-17 19:33:35

char reverse_str[6] = ""
定义了5个字符位的数组 并用5个特殊字符"\0"初一始化
之所以长度用6,是因为如果将reverse_str当字符串变量来看除了要内容要有5个字符,还要有个结束标志"\0".

通过gdb执行程序到“char reverse_str[6] = "";”之后。display serverse_str
看到:1: reverse_str = "\000\000\000\000\000"
即reverse_str的五个字符都是"\000",
但reverse_str定义时长度定的是6?

继续单步执行下去,执行完第一条:reverse_str[5-i] = str[i];后,看到:
reverse_str = "\000\000\000\000\000h"
可见reverse_str的结束标志"\000"被“h“代替,
即reverse_str[5]==h,
执行完所有代码,从数组的角度看:
reverse_str[5]==h
reverse_str[4]==e
reverse_str[3]==l
reverse_str[2]==l
reverse_str[1]==o
reverse_str[0]==\000

从字符串的角度看:
reverse_str = "\000olleh"

reverse_str的长度定义的是6,所以第6个字符是预留给“\0"的
但现在被h代替了。




juhui hui.ju@163.com
2012-02-02 10:00:14

#include <stdio.h>

int main(void)
{
	int i;
	char str[6] = "hello";
	char reverse_str[6] = "";

	printf("%s\n", str);
	for (i = 0; i < 5; i++)
		reverse_str[4-i] = str[i];
		
	printf("%s\n", reverse_str);
	return 0;
}


如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!