【C 语言】字符串拷贝 ( 指针使用前判空 | while 空语句 )

举报
韩曙亮 发表于 2022/01/13 22:56:56 2022/01/13
【摘要】 文章目录 一、指针使用前判空二、while 空语句三、代码示例 一、指针使用前判空 在任何指针使用之前 , 要先进行判空 ; 尤其是 函数 形参 指针 , 使用前...





一、指针使用前判空



在任何指针使用之前 , 要先进行判空 ;

尤其是 函数 形参 指针 , 使用前先 判断该 指针变量 是一个合法的指针 ;

void str_copy(char *from, char *to) 函数中 , 使用两个指针之前 , 首先要确保这两个指针都不为空 ;

使用如下代码 , 判断指针的合法性 , 如果指针为 NULL , 则立刻退出 ;

    // 判断 参数中的 指针变量 不为空
    if(from == NULL || to == NULL)
    {
        // 这两个指针有任何一个为空 , 都直接退出
        return;
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6




二、while 空语句



在 C 中 , 可以使用 while 空语句 , 只需要定义循环条件 , 省略循环体 , 核心功能在循环控制条件中实现 ;

    // 从 from 指针指向的字符 拷贝到
    //  to 指针指向的字符
    //  如果拷贝的值不是 \0 , 则指针累加
    //  如果拷贝的值是 \0
    // 这样就不需要额外拷贝 \0 字符了
    while((*to++ = *from++));

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6




三、代码示例



代码示例 :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
 * 实现字符串拷贝 ( 实现了模块化 )
 *      将 from 指针指向的字符串 拷贝到 to 指针指向的字符串换
 */
void str_copy(char *from, char *to)
{
    // 判断 参数中的 指针变量 不为空
    if(from == NULL || to == NULL)
    {
        // 这两个指针有任何一个为空 , 都直接退出
        return;
    }

    // 从 from 指针指向的字符 拷贝到
    //  to 指针指向的字符
    //  如果拷贝的值不是 \0 , 则指针累加
    //  如果拷贝的值是 \0
    // 这样就不需要额外拷贝 \0 字符了
    while((*to++ = *from++));
}

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;
}

  
 
  • 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
  • 43
  • 44
  • 45
  • 46

执行结果 :

buffer = Hello World!
请按任意键继续. . .

  
 
  • 1
  • 2

在这里插入图片描述

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/121483695

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。