zoukankan      html  css  js  c++  java
  • 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;
    }
    
    

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

  • 相关阅读:
    【ZJOI 2008】 生日聚会
    BZOJ2135 刷题计划(贪心+二分)
    BZOJ2124 等差子序列(树状数组+哈希)
    BZOJ2282 SDOI2011消防/NOIP2007树网的核(二分答案+树形dp)
    BZOJ1304 CQOI2009叶子的染色(树形dp)
    BZOJ1283 序列(费用流)
    BZOJ1266 AHOI2006上学路线(最短路+最小割)
    BZOJ1041 HAOI2008圆上的整点(数论)
    BZOJ3505 CQOI2014数三角形(组合数学)
    BZOJ5206 JSOI2017原力(三元环计数)
  • 原文地址:https://www.cnblogs.com/ymd12103410/p/9994795.html
Copyright © 2011-2022 走看看