1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【C 语言】字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 的操

【C 语言】字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 的操

时间:2022-06-19 04:31:49

相关推荐

【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 语言】字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 的操作一律创建新的 指针变量 执行 | 引入 辅助 局部 指针变量 )

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。