荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: huhaiming (一生只爱她), 信区: Program
标  题: 更正!!!关于编程文化(四)的讨论
发信站: 荔园晨风BBS站 (Sat May 10 13:49:28 2003), 站内信件


首先向cycker  say sorry了

由于我是文中所说的cheap仔,new hand
对于你提问的我想当然的以为是多此一举了

但其实。。。。你的是对的。

对于在函数中要malloc,需要写成:
void GetVersion(char **pStr)
{
        *pStr = (char*)malloc(10);
        strcpy( *pStr, "2.2");
}
void  main()
{
        char* ver = NULL;
        GetVersion (&ver);
                if(ver==NULL)
                        printf("!!!!!!!!\n");
                else
        printf("%s\n", ver);
        free (ver);
}

的确是要加& 引用,才可以真实地申请到空间并字符串拷贝
至于为什么,因为加了引用才是真正的传址。

而在前文中提到的:
void GetVersion(char* pStr)
{
    pStr = (char*)malloc(10);
        int len=strlen(pStr);
    strcpy ( pStr, "2.0" );
}

void main()
{
    char* ver = NULL;
    GetVersion ( ver );
        if(ver!=NULL)
            printf("%s\n",ver);
        else
            printf("malloc not succ\n");

    free ( ver );
}
如果胆敢不加引用,只是传ver过去,看起来的确像是传了地址过去
但其实,这还是一种传值,而不是真正的传址。只是,传过去的是
指针值而已。(我猜测,认为)因此,在malloc的时候,肯定不会
改变ver的实际内容的。
而我在测试过程中,也不知道可以怎么操作分函数里面的指针。。
如果不malloc的话。
如果用数组操作的话,这样的问题是不会有的。(经过测试)
而文中要提醒的,应该是不要以为传指针过去就以为是地址值。
这是不对的,应该加引用。因为传指针的时候,其实还是传值的一种。

btw:cycker你写的函数,malloc一定要转换类型才能赋值,这要小心
要写成  pStr = (char*)malloc(10);


--

菩提本无树,明镜亦非台

本来无一物,何处惹尘埃

※ 修改:·huhaiming 於 May 10 13:58:28 修改本文·[FROM: 192.168.0.200]
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.200]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店