免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4265 | 回复: 8
打印 上一主题 下一主题

C 字符数组赋值问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-25 16:29 |只看该作者 |倒序浏览
//  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什么也没打印出来。
希望你能帮助我!
谢谢!!!!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 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;
...


看看红色的部分

论坛徽章:
0
3 [报告]
发表于 2009-06-25 22:41 |只看该作者
reverse_str[5-i] = str;

论坛徽章:
1
双鱼座
日期:2014-08-25 19:13:11
4 [报告]
发表于 2009-06-26 12:46 |只看该作者

回复 #1 lightofcentury 的帖子

代码逻辑有错误:
更改如下:
[code]
   reverse_str[4-i] = str;
[\code]
注意是4 不是 5,否则就把‘\0’存到了reverse_str[0]中,打印的时候就只能是空字符串了。

论坛徽章:
0
5 [报告]
发表于 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 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-06-26 13:08 |只看该作者
我刚才发现个问题,就是楼主原来写的是 str [ i ],但提交后就变成str(各位的回复估计也是这样),所以我加了几个空格,才能看见这个效果。
所以楼主原来的问题,就是5 - i, 变成4 - i,就可以了。

论坛徽章:
0
7 [报告]
发表于 2009-06-28 23:04 |只看该作者
做coding ,要学会多思考

论坛徽章:
0
8 [报告]
发表于 2009-06-30 23:08 |只看该作者
晕 ,逻辑问题嘛 , 第一个字符复制错误,最有一个字符串结束符也没有复制 ,多思考下喔 呵呵 ,对你有帮助!

论坛徽章:
0
9 [报告]
发表于 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 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP