700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > strncat函数详解看这一篇就够了-C语言(函数实现 使用用法举例 作用 与strcat的区别)

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

时间:2020-03-22 23:24:27

相关推荐

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

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

目录

函数介绍:

与strcat的区别

函数实现:

用法示例:

结果展示:

函数介绍:

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

头 文 件:#include <string.h>

返 回 值:返回dest字符串的起始地址

说 明:

dest要有足够的空间来容纳要拷贝的字符串strncat会将dest字符串最后的’\0’覆盖掉,字符追加完成后,再追加’\0’如果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;}

结果展示:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。