栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言:字符串函数功能实现——strcat

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言:字符串函数功能实现——strcat

文章目录
  • strcat字符串链接
    • des(目标)内存空间大于或等于src+des+''的长度
    • des(目标)内存空间不足
    • 内置字符串追加/链接函数strcat
    • 内置字符串追加/链接函数strcat_s


strcat字符串链接

  将src(源)地址中的内容追加/链接到des(目标)地址后面,覆盖des(目标)地址末尾的‘’字符。

des(目标)内存空间大于或等于src+des+’’的长度
#include
#include

char* Mystrcat(char* des, const char* src)//字符串链接
{
    assert(des != NULL && src != NULL);
    
	char* p = des;
	while (*des != '')//将指针des移动指向''
	{
		des++;
	}
	while (*src != '')
	{
		*des++ = *src++;
	}
	return p;
}

int main()
{
	char irr[20] = "hello";
	const char jrr[] = "world";
	char* str1 = irr;
	const char* str2 = jrr;

	printf("%sn", Mystrcat(str1, str2));//helloworld
	
	return 0;
}
des(目标)内存空间不足
  • 定义一个较大的第三方静态局部变量
#include
#include
#include

char* Mystrcat(char* des, const char* src)//字符串链接
{
	assert(des != NULL && src != NULL); //断言,两个字符串都不为空,需要头文件#include

	static char str3[1024];//函数返回局部变量要加static,静态局部变量,程序退出时才销毁
	
	char* p = str3;

	while (*des != '')//将str1中之前的所有字符赋给p
	{
		*p++ = *des++;//后置++,先进行赋值,然后对当前地址解引用,然后再++
		//*p = *str1;
		//p++;
		//str1++;
	}
	while (*src != '')//此时p已经++,将str2中之前的所有字符赋给p,即链接在str1的字符之后
	{
		*p++ = *src++;//先赋值解引用然后++,对++之前地址的str2解引用进行判断
		
	}
	*p = '';//此时在p已有的字符之后的地址,直接赋值即可

	return str3;
}

int main()
{
	char irr[] = "hello";
	const char jrr[] = "world";
	char* str1 = irr;
	const char* str2 = jrr;

	printf("%sn", Mystrcat(str1, str2));//helloworld
	
	return 0;
}
内置字符串追加/链接函数strcat
  • char *strcat(char *des, const char *src)
    • 具有返回值即字符串的首地址,支持字符串的链式表达
    • 需要头文件 #include
    • 不会检查des(目标)空间大小
    • VS2019不能够直接使用,可以在开头添加取消错误提醒的声明 #define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include
#include

int main()
{
	char irr[20] = "hello";//内存空间不足,导致越界,会报错
	const char jrr[] = "world";
	char* str1 = irr;
	const char* str2 = jrr;

	printf("%sn", strcat(str1, str2));
	
	return 0;
}
内置字符串追加/链接函数strcat_s
  • errno_t strcat_s(char* des, size_t numberOfElements, const char* src)
    • 将src(源)地址中的内容追加/链接到des(目标)地址。
    • numberOfElements为缓冲区的大小,其大于等于des+src+’’,且小于等于des
    • 返回值类型errno_t,用于判断是否链接成功。
    • des必须大于等于des+src+’’的大小
#include
#include

int main()
{
    char irr[20] = "hello";
	const char jrr[] = "world";
	char* str1 = irr;
	const char* str2 = jrr;

	strcat_s(str1, strlen(str1) + strlen(str2) + 1, str2);
	strcat_s(str1, strlen(str1) + strlen(str2) + 1, str2);//都可以
	strcat_s(str1, sizeof(irr), str2);
	printf("%sn", str1);//helloworld
	
    return 0;
}

注:
此处sizeof是求数组irr实际大小,而不是指针str1的大小。
sizeof(str1)只是求指针的大小为4个字节。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396481.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号