一个指针程序的有关问题

一个指针程序的问题
大家请看下面这个程序


#include   <cstdlib>
#include   <iostream>

using   namespace   std;

int   main(int   argc,   char   *argv[])
{
        char   a[]= "I   am   a   boy ",b[20];
        int   i;
        for(i=0;*(a+i)!= '\0 ';i++)     *(b+i)=*(a+i);
        *(b+i)= '\0 ';
        cout < < "string   a   is   : " < <a < <endl;
        cout < < "string   b   is   : " < <b < <endl;          
        system( "PAUSE ");
        return   EXIT_SUCCESS;
}


这个程序我有两个问题,首先说明我用的是dev   c++
上面程序里   的这个语句
int   i;
for(i=0;*(a+i)!= '\0 ';i++)     *(b+i)=*(a+i);
*(b+i)= '\0 ';
是否可以改成
for(int   i=0;*(a+i)!= '\0 ';i++)     *(b+i)=*(a+i);
*(b+i)= '\0 ';
我试了一下,如果注销*(b+i)= '\0 ';编译就没有问题,否则就要报错.
看编译器的英文注释似乎在说   i是捆绑在for语句里面的在for外面就不能用了,不知是不是这样,高手给指点下.


第二个是关于指针的问题,由于上面我在定义的时候定义了个b[20],但其实我并没有用到20个空间,所以我就想用指针*b来定义,就是

char   a[]= "I   am   a   boy ",*b;

这样一改编译是对的,但运行却是错的,
看意思是一定要预先给b数组分配空间,否则就要报错

于是我试试改成这样
char   a[]= "I   am   a   boy ",*b=new   char[1000];
给指针先分配个空间,试了下果然又对了.

这种问题又是怎么回事情,请高手指点。



------解决方案--------------------
第二个是关于指针的问题,由于上面我在定义的时候定义了个b[20],但其实我并没有用到20个空间,所以我就想用指针*b来定义,就是
=========================================
char* b;
只是定义了一个指针型字符串,但没有给其分配内存空间,一般在使用前调用:
b = new char[SIZE];
或 b = (char*) malloc(sizeof(char));
来分配空间,但注意:在使用完成后,最好用delete[] b; 或 free(b); 来释放空间。
------解决方案--------------------
你用*b, 只定义了指针, *b指向的东西啥都不是, 乱指,当然出错了
如果这里*b不指向已经定义好的数组的话
你就要new出空间给他

也就是说, 使用*b, b指向的内容一定是实际存在且可用的
------解决方案--------------------
A_snail(蜗)(牛)VS.(钉)(子) ( ) 信誉:100 Blog 加为好友 2007-04-13 12:46:33 得分: 0


for(int i=0;*(a+i)!= '\0 ';i++) *(b+i)=*(a+i);
*(b+i)= '\0 ';
=============================================================
改成:
for(int i=0;*(a+i)!= '\0 ';i++)
{
*(b+i)=*(a+i);
*(b+i)= '\0 ';
}

----------------------------------------------
你觉得这样改对吗?这样b的值不都变成 '\0 '了吗?