目录
strcpy函数是C语言中的字符串复制函数。
🍂函数头文件:
#include
🍂函数原型:
char * strcpy ( char * destination, const char * source );
- destination表示目标字符串的地址。
- source表示源字符串的地址。
- 函数的返回值为目标字符串的地址。
🍂使用strcpy函数的基本步骤:
- 确保目标字符串dest有足够的空间来存储源字符串src的内容。
- 调用strcpy函数,将源字符串src的内容(包括'\0')复制到目标字符串dest中。
- 返回目标字符串dest的地址。
🍂示例代码:
- #include
- #include
-
- int main()
- {
- char dest[20];
- char src[] = "Hello world!";
-
- strcpy(dest, src);
- printf("复制后的字符串为:%s\n", dest);
-
- return 0;
- }
🎈运行结果:

1,检查源字符串src的第一个字符是否为'\0',若是,则直接返回目标字符串dest的地址。
2,通过循环遍历源字符串src,将每个字符依次复制到目标字符串dest中,直到遇到源字符串的结束符'\0'停止。
3,复制完成后,在目标字符串dest的末尾添加结束符'\0'。
4,返回目标字符串dest的地址。
🍂注意:
strcpy函数并不会检查目标字符串dest的容量是否足够,因此在使用strcpy函数时,务必确保目标字符串有足够的空间来存储源字符串的内容,以免发生缓冲区溢出的问题。
1,目标字符串必须有足够的空间来存储源字符串src的内容,负责可能会发生缓冲区溢出的问题。
- #include
- #include
-
- int main()
- {
- char dest[5] = "*****";
- char src[] = "Hello world!";
-
- strcpy(dest, src);
- printf("复制后的字符串为:%s\n", dest);
- return 0;
- }
🎈运行结果:

2,在使用strcpy函数时,应确保源字符串src以'\0'结尾,负责可能会导致复制结果不正确。
- #include
- #include
-
-
- int main()
- {
- char dest[5] = "*****";
- char src[] = { 'a', 'b', 'c' };
-
- strcpy(dest, src);
- printf("复制后的字符串为:%s\n", dest);
- return 0;
- }
🎈运行结果:

可以看出程序最终崩溃了,这是因为src数组所在的内存空间后面存储的内容不知道是什么,而strcpy函数不遇到'\0'拷贝就不会停止,这就会导致越界访问,程序就会出现问题。
3,当目标字符串dest和源字符串src重叠时,使用strcpy函数可能会导致未定义的行为,应避免这种情况的发生。
- #include
- #include
-
-
- int main()
- {
- char dest[5] = { "abcde" };
- char src[5] = { "abcde" };
-
- strcpy(dest, src);
- printf("复制后的字符串为:%s\n", dest);
- return 0;
- }
🎈运行结果:
4,目标空间必须可变
- #include
- #include
-
-
- int main()
- {
- char* dest = "Hello world!";
- char src[5] = { "abcde" };
-
- strcpy(dest, src);
- printf("复制后的字符串为:%s\n", dest);
- return 0;
- }
🎈运行结果:

上面这段代码中dest指向的是常量字符串,是不可以被修改的,而目标空间必须是可以被修改的,因为要将拷贝的字符串放在目标空间中,所以程序会崩溃。
- #include
- #include
- #include
-
- char* my_strcpy(char* dest, const char* src)
- {
- assert(dest && src);
- char* ret = dest;
- //拷贝str指向的字符串到dest指向的空间,包含'\0'
- while (*dest++ = *src++)
- {
- ;
- }
-
- return ret;//返回目标空间的起始地址
- }
-
- int main()
- {
- char arr1[20];
- char arr2[] = "Hello world!";
-
- my_strcpy(arr1, arr2);
- printf("复制后的字符串为:%s\n", arr1);
-
- return 0;
- }