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!='\0')
        {
            ++temp;         //把临时值的指针移动到目的代码的结尾处
        }
        while ((*temp++ = *src++) != '\0');   //开始在目的处后连接
        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\n", p1);
   
      char p3[]="aaaaaa";
      //strcpy(p2,p3);  有的博客说是定长,所以不能改变,这边采用相同长度去替换,也失败,主要原因就是上面说的,P2指的是只读区,里面的数据是不能改变的
    strcat_s(p1,p3);  //和strcat的区别只是保证安全性
        printf("%s\n",p1);  //这里就能正常输出了,栈数据段,可读可写
    return 0;
}

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

转载于:https://www.cnblogs.com/ymd12103410/p/9994795.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值