前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【C 语言】字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 的操作一律创建新的 指针变量 执行 | 引入 辅助 局部 指针变量 )

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

作者头像
韩曙亮
发布2023-03-29 21:24:23
发布2023-03-29 21:24:23
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

文章目录

一、函数形参使用推荐方法


在函数中 , 形参 中的 指针变量 , 不建议直接使用 ;

推荐 在 函数中 , 定义 局部 指针变量 , 接收 形参中的 指针变量 , 具体操作的是 函数中 定义的 局部指针变量 ;

直接使用 *to_tmp++ 样式的代码 , 会改变指针指向 , 有可能会导致错误 , 一旦出错 , 根本无法排查 ;

如果 将 数组首地址 的 常量指针 的 指针指向 进行修改 , 直接就报错了 ;

函数形参 的 值 , 不要轻易进行改变 , 因此一般函数的形参 , 都定义为 const char * 指针常量 类型 ;

引入 辅助 局部变量 , 接收 函数 形参变量 ;

凡是涉及 修改指针指向 的操作一律创建新的 指针变量 执行 ;

代码示例 :

代码语言:javascript
代码运行次数:0
复制
/*
 * 实现字符串拷贝 ( 实现了模块化 )
 *      将 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++));
}

二、完整代码示例


代码示例 :

代码语言:javascript
代码运行次数:0
复制
#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;
}

执行结果 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、函数形参使用推荐方法
  • 二、完整代码示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档