首先要明确strncat的功能是:从字符串src的开头拷贝n个字符到dest字符串尾部

目录

函数介绍:

与strcat的区别

函数实现:

用法示例:

结果展示:


函数介绍:

函数原型:char* strncat(char* dest, const char* src, int num)

头  文  件:#include <string.h>
返  回  值:返回dest字符串的起始地址
说  明:

  1. dest要有足够的空间来容纳要拷贝的字符串
  2. strncat会将dest字符串最后的’\0’覆盖掉,字符追加完成后,再追加’\0’
  3. 如果num大于字符串src的长度,那么仅将src全部追加到dest的尾部;如果num小于字符串src的长度,该字符会将src的所有字符附加在dest末尾。无论哪种情况,都会在新字符串的末尾添加空字符。

与strcat的区别

大家可以先对比一下两个函数:

char* My_strcat(char* dest, const char* src)

char* My_strncat(char* dest, const char* src, int n)

1、strcat()增加字符串的结束条件是src == ‘\0’;

strncat的循环结束的条件则是所要追加的字符串个数为0;

2、strcat() 函数把源字符串整个连接到目标字符串的后面;

strcat()方便之处在于只用传两个参数可以实现,比较简便;

strncat()用来连接源字符串的前n个字符到目标字符串后,所以要多传一个参数n

3、strcat本质上是把目标字符串的’\0’与源字符串的元素交换实现的,当连接的是自己的时候,就          会陷入死循环,那么这时只能使用strncat函数了
建议:建议采用strncat(),因为不会出现上述的陷入死循环的可能,并且strncat()有一个不可或缺            的优势,就是能够自由控制要增加的字符个数

函数实现:

//dest为前面的字符串,src为后面要加的字符串,n为要拷贝的字符个数
char* My_strncat(char* dest, const char* src, int n)
{char* ret = dest;  //将dest首地址储存在ret中,在之后dest++运算中,可以方便找到assert(dest != NULL && src != NULL);  //保证dest、src非空while (*dest != '\0')//用指针往后一个个找,找到dest结尾的‘\0’dest++;while (n && (*dest++ = *src++) != '\0')//把src里的字符一个个放入dest后//(*dest++ = *src++) 表示先把*src赋给*dest,再把两个指针同时往后移一位(方便下次循环)n--;   //循环跳出条件*dest = '\0';      //字符追加完成后,再追加’\0’return ret; //返回dest字符串起始地址
}

用法示例:

#include <stdio.h>
#include<string.h>
#include <assert.h>
//dest为前面的字符串,src为后面要加的字符串,n为要拷贝的字符个数
char* My_strncat(char* dest, const char* src, int n)
{char* ret = dest;  //将dest首地址储存在ret中,在之后dest++运算中,可以方便找到assert(dest != NULL && src != NULL);  //保证dest、src非空while (*dest != '\0')//用指针往后一个个找,找到dest结尾的‘\0’dest++;while (n && (*dest++ = *src++) != '\0')//把src里的字符一个个放入dest后//(*dest++ = *src++) 表示先把*src赋给*dest,再把两个指针同时往后移一位(方便下次循环)n--;   //循环跳出条件*dest = '\0';      //字符追加完成后,再追加’\0’return ret; //返回dest字符串起始地址
}
int main()
{char arr1[20] = "I LOVE YOU ";My_strncat(arr1, "SORRY" ,3);//经过函数My_strncat后 ,arr1里应该是字符串I LOVE YOU SORprintf("arr1: %s\n", arr1);return 0;
}

结果展示:

strncat函数详解看这一篇就够了-C语言(函数实现、使用用法举例、作用、与strcat的区别)相关推荐

  1. strtok函数详解 看这一篇就够了-C语言(函数讲解、函数实现、使用用法举例、作用)

    strtok()函数用于: 将字符串拆分为标记 函数介绍 函数声明:char * strtok ( char * str, const char * delimiters ); 头  文  件:#in ...

  2. strcat函数详解看这一篇就够了-C语言(函数实现、使用用法举例、作用、与strncat的区别)

    首先要明确strcat的功能是:将参数dest字符串和参数src字符串拼接起来 目录 函数介绍 与strncat的区别 函数实现: 用法示例: 结果展示: 函数介绍 函数原型:char* strcat ...

  3. strstr函数详解 看这一篇就够了-C语言(函数讲解、函数实现、使用用法举例、作用、自己实现函数 )

    strstr()函数用于:查找子字符串 目录 函数介绍 用法示例 函数讲解 实现函数 事例展示 函数介绍 函数声明:char *strstr(const char *str1, const char ...

  4. memmove函数详解 看这一篇就够了-C语言(函数讲解、函数实现、使用用法举例、作用、自己实现函数 )

    memmove()函数用于:移动内存块 函数介绍 函数声明:void * memmove ( void * destination, const void * source, size_t num ) ...

  5. strncpy函数详解看这一篇就够了-C语言(函数实现、使用用法举例、与strcpy的区别)

    首先要明确strncpy的功能是:拷贝src字符串的前n个字符至dest 目录 函数介绍 与strcpy的区别 函数实现: 用法示例: 结果展示: 函数介绍 函数原型: char *strncpy(c ...

  6. memcpy函数详解 看这一篇就够了-C语言(函数讲解、 使用用法举例、作用)

    memcpy()函数用于:复制内存块 函数介绍 函数声明:void * memcpy ( void * destination, const void * source, size_t num ); ...

  7. strerror函数详解 看这一篇就够了-C语言(函数讲解、 使用用法举例、作用)

    strerror()函数用于:获取指向错误消息字符串的指针 函数介绍 函数声明: char * strerror ( int errnum ); 头  文  件:#include <string ...

  8. strncmp函数详解看这一篇就够了-C语言(函数实现、使用用法举例、作用、与strcmp的区别)

    首先要明确strncmp的功能是:用来比较指定长度两个字符串的大小 目录 函数介绍 与strcmp的区别 ACSII表 函数实现: 用法示例: 结果展示: 函数介绍 函数原型:int strncmp( ...

  9. 代理后台中间件_Golang Gin 实战(十三)| 中间件详解看这一篇就够了

    6000字大章带你死磕Golang Gin中间件 在Gin的整个实现中,中间件可谓是Gin的精髓.一个个中间件组成一条中间件链,对HTTP Request请求进行拦截处理,实现了代码的解耦和分离,并且 ...

最新文章

  1. Object类 任何类都是object类的子类 用object对象接收数组 object类的向上向下转型...
  2. 华硕h410csm怎么开启_主板BIOS中的launch CSM选项灰色无法更改的解决方法
  3. dom复制cloneNode节点与插入节点appendChild()
  4. 记录之使用3080ti运行tensorflow-gpu=1.x版本的源码
  5. 软件培训技术选哪个?
  6. 360浏览器没有声音_你用的浏览器好用吗?该国产电脑浏览器,极速、安全,值得使用...
  7. ASP.NET Web API 2框架揭秘
  8. 【无标题】2022施工员-设备方向-岗位技能(施工员)考试题模拟考试题库及模拟考试
  9. dns服务器 性能测试,dns服务器性能测试报告.docx
  10. 读取HDF或者NetCDF格式的栅格数据
  11. 对 COMP 通证经济模型的一般性评价
  12. 【03项目立项管理】【理解版】
  13. python链家数据分析统计服_Python数据分析实战-链家北京二手房价分析
  14. 信号处理趣学D4——利用谐波叠加对周期方波进行逼近
  15. WIN7 安装 SQL2000
  16. 神经网络入门教程,现代神经网络教程
  17. ArcGIS填补栅格中空值
  18. boost spirit ——编译器,语法解析器
  19. 怎么在网页上远程看监控?——云视通websdk的使用
  20. html多行文本展开更多,仅使用CSS实现带有“显示更多”按钮的多行截断文本

热门文章

  1. coding比较gitee/github
  2. Qt5.9中设置QLabel控件边框线型(QSS实现:点画线、虚线、实线、3D边框)
  3. 敏捷,文档,人才,文化——谈小公司研发管理
  4. 第四章:Oracle 异地WINDOWS备份操作
  5. 互联网公司为何要“杀死”中年人
  6. python中英文半角还是全角_Python实现全角半角转换的方法
  7. 通过flask实现web页面简单的增删改查
  8. 基于Docker的深度学习环境NVIDIA和CUDA部署以及WSL和linux镜像问题
  9. Ubuntu18.04深度学习GPU环境配置
  10. HDU 5687 字典树入门