Chinaunix

标题: C 字符数组赋值问题 [打印本页]

作者: lightofcentury    时间: 2009-06-25 16:29
标题: C 字符数组赋值问题
//  gdb2.c

#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[5-i] = str;
    printf("%s\n", reverse_str);
   return 0;
}
我用GDB调试的时候,display  reverse_str,单步运行的时候出现reverse_str="\000\000\000\000\000",什么意思?
我本来是想让reverse_str="olleh"的,用GDB调试出来的结果是reverse_str="\000olleh".
但不在GDB里面,直接编译后./gdb2 结果第二个printf什么也没打印出来。
希望你能帮助我!
谢谢!!!!
作者: woshizzb    时间: 2009-06-25 18:45
原帖由 lightofcentury 于 2009-6-25 16:29 发表
//  gdb2.c

#include
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[5-i] = str;
...


看看红色的部分
作者: emmoblin    时间: 2009-06-25 22:41
reverse_str[5-i] = str;
作者: fxpbupt    时间: 2009-06-26 12:46
标题: 回复 #1 lightofcentury 的帖子
代码逻辑有错误:
更改如下:
[code]
   reverse_str[4-i] = str;
[\code]
注意是4 不是 5,否则就把‘\0’存到了reverse_str[0]中,打印的时候就只能是空字符串了。
作者: rockcanon    时间: 2009-06-26 13:03
reverse_str[5-i] = str;   /*   str 代表地址, reverse_str[5]应该放0    */
改成
reverse_str[4-i]=*(str+i);

reverse_str[4-i]=str [ i ];

[ 本帖最后由 rockcanon 于 2009-6-26 13:06 编辑 ]
作者: rockcanon    时间: 2009-06-26 13:08
我刚才发现个问题,就是楼主原来写的是 str [ i ],但提交后就变成str(各位的回复估计也是这样),所以我加了几个空格,才能看见这个效果。
所以楼主原来的问题,就是5 - i, 变成4 - i,就可以了。
作者: kelx    时间: 2009-06-28 23:04
做coding ,要学会多思考
作者: geniusmen    时间: 2009-06-30 23:08
晕 ,逻辑问题嘛 , 第一个字符复制错误,最有一个字符串结束符也没有复制 ,多思考下喔 呵呵 ,对你有帮助!
作者: april4boy    时间: 2009-08-05 12:27
标题: 回复 #1 lightofcentury 的帖子
#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[5-i] = str [ i ]; //原始程序这里好像是这样的,要改错
        printf("%s\n", reverse_str);
        return 0;
}

我也看到这个程序了
用gdb调试的时候,display  reverse_str
单步运行的时候出现 reverse_str="\000\000\000\000\000"
最后 reverse_str = "\000olleh"
看了你们的讨论才发现reverse_str字符数组一开始就已经被"\000"结果了,所以什么也打不出来。

改成 reverse_str[4-i] = str; OK!

学习了

[ 本帖最后由 april4boy 于 2009-8-5 12:29 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2