C 语言字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 的操作一律创建新的 指针变量 执行 | 引入 辅助 局部 指针变量 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 的操作一律创建新的 指针变量 执行 | 引入 辅助 局部 指针变量 )相关的知识,希望对你有一定的参考价值。
文章目录
一、函数形参使用推荐方法
在函数中 , 形参 中的 指针变量 , 不建议直接使用 ;
推荐 在 函数中 , 定义 局部 指针变量 , 接收 形参中的 指针变量 , 具体操作的是 函数中 定义的 局部指针变量 ;
直接使用 *to_tmp++
样式的代码 , 会改变指针指向 , 有可能会导致错误 , 一旦出错 , 根本无法排查 ;
如果 将 数组首地址 的 常量指针 的 指针指向 进行修改 , 直接就报错了 ;
函数形参 的 值 , 不要轻易进行改变 , 因此一般函数的形参 , 都定义为 const char *
指针常量 类型 ;
引入 辅助 局部变量 , 接收 函数 形参变量 ;
凡是涉及 修改指针指向 的操作一律创建新的 指针变量 执行 ;
代码示例 :
/*
* 实现字符串拷贝 ( 实现了模块化 )
* 将 from 指针指向的字符串 拷贝到 to 指针指向的字符串换
*/
void str_copy(char *from, char *to)
// 使用局部变量 接收 形参
char *from_tmp = from;
char *to_tmp = to;
// 判断 参数中的 指针变量 不为空
if(from_tmp == NULL || to_tmp == NULL)
// 这两个指针有任何一个为空 , 都直接退出
return;
// 从 from 指针指向的字符 拷贝到
// to 指针指向的字符
// 如果拷贝的值不是 \\0 , 则指针累加
// 如果拷贝的值是 \\0
// 这样就不需要额外拷贝 \\0 字符了
while((*to_tmp++ = *from_tmp++));
二、完整代码示例
代码示例 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* 实现字符串拷贝 ( 实现了模块化 )
* 将 from 指针指向的字符串 拷贝到 to 指针指向的字符串换
*/
void str_copy(char *from, char *to)
// 使用局部变量 接收 形参
char *from_tmp = from;
char *to_tmp = to;
// 判断 参数中的 指针变量 不为空
if(from_tmp == NULL || to_tmp == NULL)
// 这两个指针有任何一个为空 , 都直接退出
return;
// 从 from 指针指向的字符 拷贝到
// to 指针指向的字符
// 如果拷贝的值不是 \\0 , 则指针累加
// 如果拷贝的值是 \\0
// 这样就不需要额外拷贝 \\0 字符了
while((*to_tmp++ = *from_tmp++));
int main()
// 定义一个字符串数组
// "Hello World!" 常量在 全局区 的常量区
// 然后 拷贝到了 栈内存中的 array 数组中
char array[] = "Hello World!";
// 在栈内存中定义 char *指针
// 在堆内存分配 20 字节内存 , 用于存放字符串
char *buffer = malloc(20);
// 调用字符串拷贝函数
str_copy(array, buffer);
// 打印拷贝结果
printf("buffer = %s\\n", buffer);
// 命令行不要退出
system("pause");
return 0;
执行结果 :
以上是关于C 语言字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 的操作一律创建新的 指针变量 执行 | 引入 辅助 局部 指针变量 )的主要内容,如果未能解决你的问题,请参考以下文章
C 语言字符串拷贝 ( 指针使用前判空 | while 空语句 )
C 语言字符串模型 ( 字符串翻转模型 | 抽象成业务函数 | 形参返回值 | 函数返回值 | 函数形参处理 | 形参指针判空 )