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


strcat字符串链接

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

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

#include<stdio.h>
#include<assert.h>

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

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

	printf("%s\n", Mystrcat(str1, str2));//helloworld
	
	return 0;
}

des(目标)内存空间不足

  • 定义一个较大的第三方静态局部变量
#include<stdio.h>
#include<assert.h>
#include<string.h>

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

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

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

	return str3;
}

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

	printf("%s\n", Mystrcat(str1, str2));//helloworld
	
	return 0;
}

内置字符串追加/链接函数strcat

  • char *strcat(char *des, const char *src)
    • 具有返回值即字符串的首地址,支持字符串的链式表达
    • 需要头文件 #include<string.h>
    • 不会检查des(目标)空间大小
    • VS2019不能够直接使用,可以在开头添加取消错误提醒的声明 #define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

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

	printf("%s\n", strcat(str1, str2));
	
	return 0;
}

内置字符串追加/链接函数strcat_s

  • errno_t strcat_s(char* des, size_t numberOfElements, const char* src)
    • 将src(源)地址中的内容追加/链接到des(目标)地址。
    • numberOfElements为缓冲区的大小,其大于等于des+src+’\0’,且小于等于des
    • 返回值类型errno_t,用于判断是否链接成功。
    • des必须大于等于des+src+’\0’的大小
#include<stdio.h>
#include<string.h>

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("%s\n", str1);//helloworld
	
    return 0;
}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在C语言中,可以使用strcat函数来合并两个字符串strcat函数的原型如下: ```c char* strcat(char* dest, const char* src); ``` 其中,dest是目标字符串,src是要添加到目标字符串末尾的源字符串。该函数会将源字符串的内容复制到目标字符串的结尾,并在目标字符串的结尾添加一个空字符('\0')。下面是一个示例代码: ```c #include <stdio.h> #include <string.h> int main() { char str1[20] = "Hello"; char str2[] = "World"; strcat(str1, str2); printf("%s\n", str1); return 0; } ``` 输出结果为: ``` HelloWorld ``` 需要注意的是,目标字符串的长度必须足够长,以容纳要添加的源字符串的内容和结尾的空字符。否则,可能会发生缓冲区溢出等错误。 ### 回答2: C语言中合并字符串函数可以使用strcat()函数实现strcat()函数的原型为: char* strcat(char *dest, const char *src); 其中,dest是目标字符串,src是要合并的字符串。该函数将src字符串的内容追加到dest字符串的末尾,并返回合并后的dest字符串。 示例代码如下: #include <stdio.h> #include <string.h> int main() { char str1[100] = "Hello "; char str2[] = "World!"; strcat(str1, str2); printf("合并后的字符串为:%s\n", str1); return 0; } 运行该程序输出结果为: 合并后的字符串为:Hello World! 上述代码中,首先定义了两个字符数组str1和str2,分别存放要合并的字符串。然后通过strcat()函数将str2合并到str1的末尾,最终得到合并后的字符串"Hello World!"。 需要注意的是,合并字符串之前需要确保目标字符串dest有足够的空间来存放合并后的结果,否则可能会发生缓冲区溢出的问题。 ### 回答3: 在C语言中,我们可以使用strcat函数来合并字符串strcat函数的原型如下: ``` char *strcat(char* dest, const char* src); ``` 该函数将src指向的字符串追加到dest指向的字符串的末尾,并返回追加后的字符串的起始地址。 使用strcat函数合并字符串的过程如下: 1. 首先,创建一个字符数组或者字符指针来存储合并后的结果。 2. 将第一个字符串拷贝到结果数组中,可以使用strcpy函数实现。 3. 在结果数组的末尾调用strcat函数,将第二个字符串追加到末尾。 4. 重复步骤3,将后续的字符串一个个地追加到结果数组的末尾。 5. 最后,结果数组中存储的就是合并后的字符串。 以下是一个示例代码,其中合并了三个字符串: ```c #include <stdio.h> #include <string.h> int main() { char str1[100] = "Hello"; char str2[] = ", World"; char str3[] = "!"; strcat(str1, str2); strcat(str1, str3); printf("合并后的字符串:%s\n", str1); return 0; } ``` 输出结果为: ``` 合并后的字符串:Hello, World! ``` 需要注意的是,使用strcat函数时应确保dest指向的字符串有足够的空间来容纳追加的字符串,否则可能会导致缓冲区溢出的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值