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

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言字符串拷贝 ( 指针使用前判空 | while 空语句 )相关的知识,希望对你有一定的参考价值。





一、指针使用前判空



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

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

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

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

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




二、while 空语句



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

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




三、代码示例



代码示例 :

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

执行结果 :

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

以上是关于C 语言字符串拷贝 ( 指针使用前判空 | while 空语句 )的主要内容,如果未能解决你的问题,请参考以下文章

C 语言字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )(代码

C 语言字符串模型 ( 两头堵模型 | 将 两头堵模型 抽象成业务模块函数 | 形参返回值 | 函数返回值 | 形参指针判空 | 形参返回值操作 )

C 语言字符串拷贝 ( 优化指针操作 )

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

c语言中strcpy跟mencpy哪个效率更高?

C语言如何深拷贝结构体?