C语言详细解读函数:strcpy()函数与strncpy()函数

2025-11-02 13:14:34 by admin 同城交友

💓 博客主页:Kitten饭团的CSDN主页

📁 文章专栏:C语言专栏

期待您的关注

目录

一、strcpy和strncpy函数的基本概念

1.1 函数定义

1.2 功能描述

二、strcpy函数的使用方法

三、编写strcpy函数的实现原理

四、strcpy函数的注意事项

4.1 目标缓冲区必须足够大

4.2 源字符串必须有结束符\0

string头文件其他相关库函数文章:C语言详细解读函数:strstr()函数

C语言详细解读函数:strlen()函数

C语言详细解读函数:strcmp()函数与strncmp()函数

函数概念来自于网站 https://cplusplus.com/reference/

头文件为

一、strcpy和strncpy函数的基本概念

1.1 函数定义

函数的原型:

参数说明:

🌈 函数参数 destination 的含义:一个指针,指向用于存储复制结果的目标字符数组

🌈 函数参数 source 的含义:指向待复制的字符串

🌈 函数参数 num 的含义:num指定了最多从源字符串复制多少个字符到目标数组

🌈 参数类型 const char* 的含义:const char* 表示该指针指向的内容是常量,即不能通过这个指针修改所指向的数据。

可见strcpy和strncpy的区别在于:

特性strcpystrncpy终止符处理总是复制源字符串的终止符 \0可能不添加终止符 \0缓冲区溢出防护❌ 无保护(危险)⚠️ 有限防护(需手动处理终止符)复制行为复制整个字符串直到 \0最多复制指定长度字符填充行为无若源字符串短于指定长度,填充 \0

1.2 功能描述

功能:复制字符串、复制字符串的前n个字符

实现原理:

🌈 strcpy: 从源地址开始逐个字符复制到目标地址,直到遇到并复制了源字符串的终止空字符 '\0'。返回目标数组起始地址。

🌈 strncpy复制最多 n 个字符或直到遇到源字符串的 '\0'

如果复制字符数少于 n:用空字符 '\0' 填充剩余空间;

如果源字符串长度 ≥ n:精确复制 n 个字符不添加终止空字符返回目标数组起始地址

返回值:destination

二、strcpy函数的使用方法

下面选择使用strcpy来举例,strncpy只是在此基础上加上一个参数n,整体大差不大

🌈 使用方法:

#include

#include

int main()

{

char str1[20] = "Hello";

char str2[20] = "World!";

printf("str1[10] = %s\n", str1);

strcpy( str1, str2 );

printf("str1[10] = %s\n", str1);

return 0;

}

🌈 打印结果:

三、编写strcpy函数的实现原理

🌈 内部实现机制:根据函数的基本概念来写一个自己的 strcpy函数

🌈 示例代码:

#include

#include

/**

* @brief 复制字符串

* @note None

* @param dest:指向目标内存,存储复制的字符串

* @param src: 指向待复制的字符串

* @retval 成功:返回一个指针,指向复制后的字符串,等价于dest

失败:返回NULL

*/

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

{

// 1、检查指针有效性

if (dest == NULL || src == NULL)

{

return NULL;

}

// 2、复制字符串内容

char *orig_dest = dest; // 保存原始指针用于返回

while (*src != '\0')

{

*dest = *src;

dest++;

src++;

}

*dest = '\0'; // 手动添加字符串结束符

// 3、返回原始的dest指针

return orig_dest;

}

int main()

{

char str1[20] = "Hello";

char str2[20] = "World!";

printf("str1[10] = %s\n", str1);

MyLib_StrCpy( str1, str2 );

printf("str1[10] = %s\n", str1);

return 0;

}

四、strcpy函数的注意事项

相比较strcpy,strncpy需要注意的事项少一些,这里列举几个关于strcpy平时可能遇见比较多的注意事项 。

4.1 目标缓冲区必须足够大

就像装水的桶,目标缓冲区必须比源字符串大至少1位(多出来的位置放)

🌈 错误示例:

char name[5]; // 只能装4个字符+1个\0

strcpy(name, "Alexander"); // 溢出!后果严重

4.2 源字符串必须有结束符\0

strcpy通过 \0 判断何时停止复制

🌈 错误示例:

char no_end[3] = {'A','B','C'}; // 没有\0

strcpy(buffer, no_end); // 会一直复制直到遇到内存中的\0 → 可能崩溃

strcpy函数和strncpy函数的内容到此结束了,要是有不足希望各位能够在评论区指出,要是文章对你有帮助,可以给个免费的赞和收藏💞💞💞

Copyright © 2088 0762网游争霸活动中心 All Rights Reserved.
友情链接