平时用strcpy的时候只管拿用.有一次忽然想到了strcpy的szDestination这个输出参数,我想不懂它是怎样实现输出的?如果要在调用函数中获一字符串,这个输出参数是一个双层char指针才对啊?如下代码:
    // 这里的函数参数用到了双重指针
    void getoutchar(char** szDest)
    {
        *szDest = (char*)malloc(50 * sizeof(char));
        strcpy(*szDest, "这是一个获得字符串的输出参数!");
    }
    
    int main()
    {
        char* p = NULL;
        
        // 通过指向指针的指针获得指针
        getoutchar(&p);
        printf("%s\n", p);
        
        free(p);
        
        return 0;
    }   
    我怎么都想不出来想将一个字符串放到一个"一重指针"的输出参数输出的方法,所以我对strcpy获得字符串输出参数感到不解.希望朋友们给出答案.

解决方案 »

  1.   

    void getoutchar(char* szDest, const char * str)
    {
    int i, len = 0;
    len = strlen(str);
    for(i = 0; i < len; i++){
    *(szDest + i) = str[i];
    }
    }int main()
    {
    char* p = NULL;
    char str[] = "abcdefg";
    p = (char *)malloc(50 * sizeof(char));
    memset(p, 0, 50);
    getoutchar(p, str);
    printf("%s\n", p);

    free(p);
    return 0;
    }这样不就可以了
      

  2.   

    我靠,你的指针没搞明白,搞混了.szDesc在函数中没有变化,因为它指向的空间是我们分配的,所以改变的是空间的内容.如果用二次指针,则表明函数可能改写我们的指针值,让它指向其他的空间.