C语言中strcpy和strcat的使用和模拟实现

 更新时间:2024年03月26日 10:50:57   作者:T潜T  
strcpy() 函数是 C语言中一个非常重要的字符串处理函数,其功能是将一个字符串复制到另一个字符串中,strcat函数可以将一个字符串拼接到另一个字符串的末尾,本文给大家介绍了C语言中strcpy和strcat的使用和模拟实现,需要的朋友可以参考下

一,strcpy()函数

strcpy() 函数是 C语言中一个非常重要的字符串处理函数,其功能是将一个字符串复制到另一个字符串中。该函数原型如下:

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

其中,dest 表示目标字符串,即将被复制到的字符串;src 表示源字符串,即将被复制的字符串。函数返回一个指向目标字符串的指针。

具体使用方法

我们可以先定义一个源字符串,arr1和一个目标字符串arr2,然后调用strcpy()函数将源字符串arr1中的内容复制到arr2中,最后我们可以使用printf()函数输出源字符串和目标字符串的值。

#include <stdio.h>
#include <string.h>
int main()
{
    char arr1[] = "Hello World";
    char arr2[100];
    strcpy(dest, src);
    printf("Source String: %s\n", arr1);
    printf("Destination String: %s\n", arr2);
    return 0;
}

运行结果

我们可以看到arr1和arr2打印的结果是一样的,说明strcpy()函数正确的将arr1中的内容复制到arr2中了

注意

1,在使用strcpy()函数时arr2一定要有足够大的空间来储存arr1中复制过来的内容,否则,就会导致内存越界和数据丢失,

2,由于 strcpy() 函数的第二个参数是一个 const char * 类型,即源字符串是只读的,因此在复制过程中不会改变源字符串的值。

二,strcat()函数

strcat函数可以将一个字符串拼接到另一个字符串的末尾,

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

#include <stdio.h>
#include <string.h>
int main()
{
    char str1[50] = "Hello";
    char str2[50] = "World";
    strcat(str1, str2);
    printf("Result: %s\n", str1);
    return 0;
}

运行结果

我们可以看到strcat()函数将字符串arr2拼接到字符串arr1的末尾。strcat()函数用于将一个字符串拼接到字符串的末尾,同样,strcat()函数也要注意内存的越界。

三,strncpy()函数

有时候我们需要复制一个字符串的前 n 个字符,而不是整个字符串。可以使用 strncpy() 函数来实现这个功能,

char *strncpy(char *dest, const char *src, size_t n);

其中,dest 表示目标字符串,即将被复制到的字符串;src 表示源字符串,即将被复制的字符串;n 表示要复制的字符数。函数返回一个指向目标字符串的指针。

也就是说,strncpy()函数是将 src 指向的前 n 个字符拷贝到 dest 字符数组中:

  • 如果 src 的长度小于 n,strncpy() 函数将在 dest 的剩余部分用空字符填充,凑齐 n 个字符。
  • 如果 src 的长度大于或等于 n,则复制的字符串将不会以空字符结尾。这可能会导致未定义的行为,因为许多字符串操作都依赖于空字符来识别字符串的结尾。

例如:我们需要将arr1中的前5个字符复制到arr2中

#include <stdio.h>
#include <string.h>
int main()
{
    char arr1[] = "Hello World";
    char arr2[100];
    strncpy(arr2, arr1, 5);
    printf("Source String: %s\n", arr1);
    printf("Destination String: %s\n", arr2);
    return 0;
}

结果

strncpy也可以截取一个字符串中的一段字符串

比如我们使用 strncpy() 函数将源字符串 str 中的第 6 个字符开始的 5 个字符复制到源字符串中,然后使用空字符将字符串截断。最终结果为"World"。

需要注意的是,strncpy() 函数复制的字符数必须小于或等于源字符串的长度,否则可能会导致未定义的行为。

#include <stdio.h>
#include <string.h>
int main()
{
	char str[] = "Hello World";
	strncpy(str, str + 6, 5);
	str[5] = '\0';
	printf("Result: %s\n", str);
	return 0;
}

运行结果

四,strcpy的模拟实现

在c语言中,我们定义一个字符数组arr1将字符串储存在字符数组中。字符数组本质上是一个指向字符的指针。因此我们可以使用指针来实现字符串的复制操作。

#include<stdio.h>
#include<assert.h>
void my_strcpy(char* dest, const char* src)
{
	assert(dest && src);
	char* p = dest;
	while(*src!='\0')
	{
		*dest++ = *src++;
		
	}
	*dest = '\0';
	
}
 
int main()
{
	char arr1[] = "wanglongbao";
	char arr2[100];
	my_strcpy(arr2, arr1);
	printf("arr1=%s\n", arr1);
	printf("arr2=%s\n", arr2);
	return 0;
}

运行结果

五,strcat的模拟实现

#include<stdio.h>
#include<assert.h>
void my_strcat(char* dest, const char* scr)
{
	assert(dest && scr);
	while (*dest != '\0')
	{
		dest++;
	}
	while (*scr != '\0')
	{
		*dest++ = *scr++;
	}
	*dest = '\0';
 
}
int main()
{
	char arr1[] = "wanghongbao";
	char arr2[] = "jiayou";
	my_strcat(arr1, arr2);
	printf("%s", arr1);
	return 0;
}

运行结果

以上就是C语言中strcpy和strcat的使用和模拟实现的详细内容,更多关于C语言strcpy和strcat使用的资料请关注脚本之家其它相关文章!

相关文章

  • opencv3/C++绘制几何图形实例

    opencv3/C++绘制几何图形实例

    今天小编就为大家分享一篇opencv3/C++绘制几何图形实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • C语言职工管理系统设计

    C语言职工管理系统设计

    这篇文章主要为大家分享了一份C语言职工管理系统设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 指向类成员函数的指针其实并非指针

    指向类成员函数的指针其实并非指针

    对于指向类成员的指针,必须紧记,指向类成员(非static)的指针并非指针
    2013-08-08
  • C++时间戳转换成日期时间的步骤和示例代码

    C++时间戳转换成日期时间的步骤和示例代码

    这篇文章主要介绍了C++时间戳转换成日期时间的步骤和示例代码,需要的朋友可以参考下
    2016-12-12
  • C语言实现按行读写文件

    C语言实现按行读写文件

    这篇文章主要为大家详细介绍了C语言实现按行读写文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • C语言 数据结构中栈的实现代码

    C语言 数据结构中栈的实现代码

    这篇文章主要介绍了C语言 数据结构中栈的实现代码的相关资料,需要的朋友可以参考下
    2016-10-10
  • C++数据结构之list详解

    C++数据结构之list详解

    list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的
    2021-11-11
  • 用C/C++代码检测ip能否ping通(配合awk和system可以做到批量检测)

    用C/C++代码检测ip能否ping通(配合awk和system可以做到批量检测)

    今天小编就为大家分享一篇关于用C/C++代码检测ip能否ping通(配合awk和system可以做到批量检测),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • C++ 之 Asio 库(全面解析)

    C++ 之 Asio 库(全面解析)

    下面小编就为大家带来一篇C++ 之 Asio 库(全面解析)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • C++实现动态顺序表

    C++实现动态顺序表

    这篇文章主要为大家详细介绍了C++实现动态顺序表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05

最新评论