使用 strcpy()
本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 16 课,共 63 课。
你已经学会了如何使用 strlen() 查找字符串的长度,但如果你需要将一个字符串的内容复制到另一个字符串中,该怎么办?在 C 中,你不能像处理普通变量那样使用赋值运算符(=)复制字符串。
原因是字符串属于字符数组,使用 = 处理数组时,你只会复制内存地址,而不会复制实际内容。这时,<string.h> 库中的 strcpy() 函数就必不可少了。
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // 将 "Hello" 复制到 destination 中strcpy() 函数接受两个参数:目标数组(你想要复制到的位置)和源字符串(你想要复制的内容)。它会将源字符串中的每个字符复制到目标数组中,包括空终止符。
目标数组必须足够大,才能容纳整个源字符串和空终止符。如果目标数组太小,strcpy() 就会写出数组边界,导致未定义行为。
这个函数是 C 中字符串操作的基础,可用于复制字符串、用现有内容初始化字符串变量,以及为后续处理准备字符串。
挑战
简单编写一个 C 程序,使用 strcpy() 函数演示字符串复制。程序应当:
- 读取一个整数
n,表示要执行的字符串操作次数 - 对于每次操作:
- 从输入中读取一个源字符串
- 声明一个名为
destination、包含 100 个元素的字符数组 - 使用
strcpy()将源字符串复制到目标数组中 - 打印原始源字符串和复制后的目标字符串
- 完成所有操作后,通过以下方式演示复制后的字符串彼此独立:
- 将最后一个目标数组的第一个字符修改为 'X'
- 打印修改后的目标字符串,展示它已发生变化
记得包含 <string.h> 头文件,以便使用 strcpy() 函数。
输出应按以下格式显示结果:
Source: [source_string]
Destination: [copied_string]
Source: [source_string]
Destination: [copied_string]
...
Modified last destination: [modified_string]例如,如果输入是:
3
hello
world
programming输出应为:
Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: Xrogramming这个挑战将测试你对使用 strcpy() 将字符串内容从一个字符数组复制到另一个字符数组的理解、为目标数组正确分配内存的能力,并演示复制后的字符串独立于其源字符串。
亲手试试
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char source[100];
char destination[100];
// TODO: 在这里编写你的代码
// 用循环处理 n 次字符串操作
// 每次操作:
// 读取 source 字符串
// 使用 strcpy() 将 source 复制到 destination
// 按要求的格式输出两个字符串
// TODO: 循环结束后,修改最后一个 destination 的首字符
// 并输出修改后的字符串
return 0;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C 在线编译器