指针的输入输出模型

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//指针做输出,被调用函数分配内存 √
//指针做输入,主调函数分配内存
//求两段话的长度
int getNum(char **myp1,int *mylen1,char **myp2,int *mylen2)
{
    int ret = 0;
    char *tmp1 = NULL;
    char *tmp2 = NULL;
    tmp1 = (char *)malloc(100);
    if (tmp1 == NULL)
    {
        return -1;
    }
    tmp1 = strcpy(tmp1, "abcdefg");
    *mylen1 = strlen(tmp1);
    *myp1 = tmp1;    //间接修改实参p1的值

    tmp2 = (char *)malloc(100);
    if (tmp2 == NULL)
    {
        return -2;
    }
    tmp2 = strcpy(tmp2, "11222");
    *mylen2 = strlen(tmp2);
    *myp2 = tmp2;    //间接修改实参p2的值
    return ret;
}

int getNum_Free(char **myp1)
{
    //if (myp1 == NULL)
    //{
    //    return;
    //}
    //free(*myp1);    //释放完指针变量,所指的内存空间
    //*myp1 = NULL;    //把实参改成NULL

    //或者这么写
    char *tmp;
    tmp = myp1;
    if (myp1 == NULL)
    {
        return -1;
    }
    tmp = *myp1;    
    free(tmp);
    *myp1 = NULL;
    return 0;
}
int main()
{
    char *p1=NULL, *p2=NULL;
    int len1 = 0,len2 = 0;
    int ret = 0;
    ret = getNum(&p1, &len1, &p2, &len2);
    
    if (!ret)
    {
        printf("p1:%s
", p1);
        printf("p2:%s
", p2);

        getNum_Free(&p1);
        getNum_Free(&p2);
    }
    else
    {
        printf("func getNum():%d", ret);
    }
    system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/linst/p/4857780.html