碎碎念(3)

目录

1.栈取返回变量的值,变量的地址

2.const

3.二级指针

第一种内存模型

指针数组:它是一个数组,数组中的每个元素是指针类型
char *p1 = "111";
char *p2 = "222";
char *p3 = "333";

char *p[] = {"111","222","333"};

第二种内存模型

char a[][30] = {"111","222","333"};

第三种内存模型

char **p = (char **)malloc(3*sizeof(char *));
for(int i=0; i<3; i++)
{
    p[i] = (char *)malloc(10*sizeof(char));
    sprintf(p[i],"%d%d",i,i);
}

4.练习

有字符串有以下特征(“abcd11111abcd2222abcdqqqqq”),求写一个函数接口,输出以下结果。
把字符串替换成(dcba11111dcba2222dcbaqqqqq),并把结果传出。
要求:
    1. 正确实现接口和功能
    2. 编写测试用例
/*
src:    原字符串
dst:    生成的或需要填充的字符串
sub:    需要查找的子字符串
new_sub:提换的新子字符串

return : 0 成功
        -1 失败
*/
int replaceSubstr(/* in */char *src, /* out */char** dst, 
             /* in */char *sub,  /* in */char *new_sub);
             

过程:

int replaceSubstr(/* in */char *src, /* out */char** dst,
                  /* in */char *sub,  /* in */char *new_sub)
{
    // src = "22abcd11111abcd2222abcdqqqqq"
    // dst = "22dcba11111dcba2222dcbaqqqqq"

    if (src == NULL || dst == NULL || sub == NULL || new_sub == NULL)
    {
        return -1;
    }
    
    char tmp[512] = { 0 }; //临时变量, 字符数组
    
    char *start = src; //记录查找的起点
    char *p = NULL; //匹配字符串的首地址

    do 
    {
        p = strstr(start, sub);
        if (p != NULL)
        {
            int len = p - start;
            if (len > 0)
            {
                //把匹配字符串前面的内容连接过去
                strncat(tmp, start, len);
            }
    
            strncat(tmp, new_sub, strlen(new_sub)); //追加替换的新串
    
            //更改查找的起点位置
            start = p + strlen(sub);
        }
        else
        {
            strcat(tmp, start);
    
            break;
        }
    
    } while (*start != 0 );

    char *buf = malloc(strlen(tmp) + 1);
    strcpy(buf, tmp);
    *dst = buf;
    
    return 0;
}

5.常用函数

strstr()、strctr()
strcat()、strncat():字符串连接
strcpy()、strncpy()

猜你喜欢

转载自www.cnblogs.com/EngineerZhang/p/9704085.html