• strcat的用法


    原型:

    char *strcat(char *str1,char *str2);
    

    strcat的实现:

    
    char* MyStrcat(char *dst, const char*src)
    {
    	if ((dst == NULL) || (src == NULL))   //先判断指针是否为空,尽量用NULL,0有时候打错不容易发现
    		return NULL;
    	else
    	{
    		char* temp = dst;       //把地址赋给临时值,之后用临时值去增加
    		while (*temp!='')
    		{
    			++temp;         //把临时值的指针移动到目的代码的结尾处
    		}
    		while ((*temp++ = *src++) != '');   //开始在目的处后连接
    		return dst;       //返回原始指针,方便链式连接
    	}
    }
    

    把两个字符串连接合并成一个字符串,也就是把字符串str2连接到字符串str1后面,连接后的结果放在字符串str1中。

    注意:str1指向的内存空间要足够容纳字符串str2.

    返回值为指向str1的指针。

    int _tmain(int argc, _TCHAR* argv[])
    {
    	char p1[12] = "apple"; //##p2指向的是只读数据段,strcat是要写数据。往只读数据段写,当然会有异常,p1指向的是栈数据段,可写,所以能通过##
    	char *p2 = "banana";  //p2是一个指向字符串的指针,编译器根据初始化此指针时给出的值生成一个字符串,然后把这个字符串的第一个字符的地址拿出来,让p2指向它,其中的数值在只读区,不能改变
    	strcat_s(p1, p2);
    	printf("%s
    ", p1);
       
          char p3[]="aaaaaa";
          //strcpy(p2,p3);  有的博客说是定长,所以不能改变,这边采用相同长度去替换,也失败,主要原因就是上面说的,P2指的是只读区,里面的数据是不能改变的
    	strcat_s(p1,p3);  //和strcat的区别只是保证安全性
            printf("%s
    ",p1);  //这里就能正常输出了,栈数据段,可读可写
    	return 0;
    }
    
    

    总结一下:要连接字符时,要考虑连接后的字符长度是否能在目标空间中放下,另外一点就是,要看数据是否是可写的,指针指向只读区时也是不可行的,数组存放值后,编译器只是把数组的第一个字符地址给指针

  • 相关阅读:
    P5356 [Ynoi2017]由乃打扑克
    P4921 [MtOI2018]情侣?给我烧了!/P4931 [MtOI2018]情侣?给我烧了!(加强版)
    P2605 [ZJOI2010]基站选址
    CF1062E Company
    kd-tree
    扩展中国剩余定理(EXCRT)
    CF264C Choosing Balls
    CF1139D Steps to One
    P4655 [CEOI2017]Building Bridges
    P3311 [SDOI2014] 数数
  • 原文地址:https://www.cnblogs.com/ymd12103410/p/9994795.html
Copyright © 2020-2023  润新知