鱼C论坛

 找回密码
 立即注册
查看: 2613|回复: 5

求助,求助。 请达人们帮忙。。

[复制链接]
发表于 2011-11-30 04:40:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zjxy2545 于 2011-11-30 04:41 编辑

                              这个程序是要求用下标法把字符串A复制到字符串B
#include <stdio.h>

void main()

{
        char a[] = "i am china", b[40];    1:  //为什么这里要定义B数组为40??定义长度大于a数组就行?   
        int i;
        for (i = 0; *(a + i) != '\0'; i++)    2: //为什么我调试的时候b总是等于105‘I’,
        {
                *(b + i) = *(a + i);      3: //指针没声明定义都能用? 学指针很迷茫啊。
                printf("string a is: %s\n", a);
        }
        *(b + i) = '\0';      4: // 为什么要在这出现这一句,  这句不加会打印乱码, 但是为什么需要
                                                    我就不晓得了。。
    printf("string b is: %s\n", b);
        for( i = 0; b != '\0'; i++)
        {
                printf("%c", b);
        }
}

请达人们帮忙解释一下,   不懂的请不要乱回答, 以免误导新手。。谢谢。  

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-30 08:44:09 | 显示全部楼层
代码没仔细看,运算符优先级考虑周全了吗?估计问题在这
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-30 08:49:35 | 显示全部楼层
1、理论上只有b的长度大于a就行,但有时不知道a到底多大时或者a是变化的时候,就会把b定义大点
2、b你输出的时候虽然是一个循环,但是你都是输出的b[0];
for( i = 0; b != '\0'; i++)
        {
                printf("%c", b);
        }
3、数组和指针有时候可以说是两种不同表现形式吧

4、'\0' 是字符串结束的标志,如果不加,字符串b就会打印到遇到'\0'为止,但是后面的数组都是未初始化的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-30 16:44:21 | 显示全部楼层

都说了不懂请不要乱回答,  您看我提出的4个问题哪个问题涉及到运算符优先级的问题了??

不过还是感谢你来看看。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-30 16:46:03 | 显示全部楼层
wangyexin 发表于 2011-11-30 08:49
1、理论上只有b的长度大于a就行,但有时不知道a到底多大时或者a是变化的时候,就会把b定义大点
2、b你输出 ...

感谢您的回答,  但是还是不懂。。  a倒是解决了。。 就是如你所说的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-30 17:52:04 | 显示全部楼层
1:  //为什么这里要定义B数组为40??定义长度大于a数组就行?   
you are right

2: //为什么我调试的时候b总是等于105‘I’,
因为b是数组的名字,你看见的是b[0]当复制完第一个字符的时候b[0]就是'i',后面b[0]也还是'i'

3: //指针没声明定义都能用? 学指针很迷茫啊。
数组名会自动转化为指针
*(b + i) 等价于b[i]
  *(a + i) 等价于a[i]

4: // 为什么要在这出现这一句,  这句不加会打印乱码, 但是为什么需要
                                                    我就不晓得了。。
for (i = 0; *(a + i) != '\0'; i++)   
这个循环结束的时候*(a + i) !== '\0';
所以字符'\0'不会被拷贝到数组b里,所以循环结束还要拷贝一次 字符'\0'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 18:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表