【C 语言】字符串拷贝 ( 字符串拷贝业务逻辑代码 | 分离 主函数 与 字符串拷贝 业务模型 )
【摘要】
文章目录
一、字符串拷贝业务逻辑代码二、分离 主函数 与 字符串拷贝 业务模型
一、字符串拷贝业务逻辑代码
下面的代码 , 是 字符串 拷贝 最简单的代码 , 仅 ...
一、字符串拷贝业务逻辑代码
下面的代码 , 是 字符串 拷贝 最简单的代码 , 仅 使用 指针 遍历内存 , 实现了字符串拷贝功能 ;
上述操作 , 没有考虑 任何 软件 设计功能 ;
代码示例 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// 定义一个字符串数组
// "Hello World!" 常量在 全局区 的常量区
// 然后 拷贝到了 栈内存中的 array 数组中
char array[] = "Hello World!";
// 在栈内存中定义 char[] 数组
// 指定数组大小 20 个 char 元素
char buffer[20];
// 循环控制变量
int i = 0;
// 将 array 数组中的数据 , 拷贝到 buffer 数组中
// 遍历时 , 只要遍历到的值不为 \0 , 就进行复制
// 如果遍历到 \0 , 则直接退出 , \0 没有存储到 buffer 数组中
for(i = 0; *(array + i) != '\0'; i++)
{
// 使用指针操作 字符数组 进行拷贝赋值操作
*(buffer + i) = *(array + i);
}
// \0 没有存储到 buffer 数组中
// 此处专门进行 \0 字符存储
buffer[i] = '\0';
// 打印拷贝结果
printf("buffer = %s\n", buffer);
// 命令行不要退出
system("pause");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
运行结果 :
buffer = Hello World!
请按任意键继续. . .
- 1
- 2
二、分离 主函数 与 字符串拷贝 业务模型
将 字符串拷贝 抽象成 函数模型 , 传入 2 2 2 个指针 , 这两个指针分别指向一个数组空间 , 从一个指针指向的内存中 , 拷贝数据到另一个指针指向的内存中 ;
/*
* 实现字符串拷贝 ( 实现了模块化 )
* 将 from 指针指向的字符串 拷贝到 to 指针指向的字符串换
*/
void str_copy(char *from, char *to)
{
// 如果 from 指向的字符不为 \0 , 则继续遍历
// 此处无法将 \0 拷贝到 to 字符串中
for(; *from != '\0'; from++, to++)
{
// 拷贝字符
*to = *from;
}
// 将字符串最后一个字节拷贝过去
*to = '\0';
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
完整代码示例 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* 实现字符串拷贝 ( 实现了模块化 )
* 将 from 指针指向的字符串 拷贝到 to 指针指向的字符串换
*/
void str_copy(char *from, char *to)
{
// 如果 from 指向的字符不为 \0 , 则继续遍历
// 此处无法将 \0 拷贝到 to 字符串中
for(; *from != '\0'; from++, to++)
{
// 拷贝字符
*to = *from;
}
// 将字符串最后一个字节拷贝过去
*to = '\0';
}
int main()
{
// 定义一个字符串数组
// "Hello World!" 常量在 全局区 的常量区
// 然后 拷贝到了 栈内存中的 array 数组中
char array[] = "Hello World!";
// 在栈内存中定义 char[] 数组
// 指定数组大小 20 个 char 元素
char buffer[20];
// 调用字符串拷贝函数
str_copy(array, buffer);
// 打印拷贝结果
printf("buffer = %s\n", buffer);
// 命令行不要退出
system("pause");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
执行结果 :
buffer = Hello World!
请按任意键继续. . .
- 1
- 2
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/121480896
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)