碎碎念(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()
原文地址:https://www.cnblogs.com/EngineerZhang/p/9704085.html