当前位置: 首页 > news >正文

c语言:模拟字符串拷贝功能(strcpy),面试题

面试题:优化中的优化(10分满分)

字符串拷贝:是将一个字符串的内容复制到另一个字符串中的操作。

运用函数模拟字符串拷贝:(5分)

模拟字符串拷贝
#include <stdio.h>
void my_strcpy(char* dest, char* str)
{while (*str != '\0'){*dest = *str;str++;dest++;}*dest = *str;}
int main()
{strcpy字符串拷贝char arr1[] = "##########";char arr2[] = "柯南";my_strcpy(arr1, arr2);printf("%s\n", arr1);return 0;
}

对于以上代码进行优化:(6分)

后置++的使用和赋值的灵活使用让代码更加简洁:

//优化模拟strcpy
#include <stdio.h>
void my_strcpy(char* dest,char*scr)
{while (*dest++ = *scr++)//第二个优化  {;//*dest++ = *scr++;//第一个优化}
}
int main()
{char arr1[] = "##########";char arr2[] = "柯南";my_strcpy(arr1, arr2);printf("%s\n", arr1);return 0;
}

更加一步的优化:排除野指针的优化(7分)

//排除NULL的使用(进一步优化)
#include <stdio.h>
void my_strcpy(char* dest, char* scr)
{if (dest != NULL && scr != NULL){while (*dest++ = *scr++)//第二个优化{;//*dest++ = *scr++;//第一个优化}}
}
int main()
{char arr1[] = "##########";char arr2[] = "柯南";my_strcpy(arr1, arr2);printf("%s\n", arr1);return 0;
}

 assert的断言的使用:(进行报错的提示)(8分)

//进行报错的提示:
#include <stdio.h>
#include <assert.h>
void my_strcpy(char* dest, char* src)
{assert(dest != NULL);assert(src != NULL);while (*dest++ = *src++){;}
}
int main()
{char arr1[] = "##########";char arr2[] = "柯南";my_strcpy(arr1, arr2);printf("%s\n", arr1);return 0;
}

 const求改,和返回值的修改(不可修改的左值)(10分):

//const求改,和返回值的修改(不可修改的左值)
#include <stdio.h>
#include <assert.h>
char *my_strcpy(char* dest, const char* src)
{char* ret = dest;assert(src != NULL);assert(dest != NULL);while (*dest++ = *src++){;}return ret;
}
int main()
{char arr1[] = "##########";char arr2[] = "柯南";printf("%s", my_strcpy(arr1, arr2));return 0;
}

http://www.lryc.cn/news/333640.html

相关文章:

  • 信创环境ES索引管理脚本:close, delete
  • torch-v1.3.1-build
  • C语言宏定义笔记
  • 设计模式:生活中的观察者模式
  • Qt实现Kermit协议(四)
  • 苏州金龙助力旅游客运加速蜕变
  • 头盔检测 | 基于Caffe-SSD目标检测算法实现的建筑工地头盔检测
  • Stable diffusion 加载扩展列表报错解决方法
  • Git(8)之分支间同步特定提交
  • 万得AI算法工程师一面面试题6道|含解析
  • 蓝桥杯23年第十四届省赛-异或和之和|拆位、贡献法
  • Unity进阶之路(1)回顾与思考
  • 【C语言】——指针八:指针运算笔试题解析
  • JVM字节码与类的加载——class文件结构
  • 小程序如何通过公众号发送新订单提醒
  • 聊聊公众号最让我不爽的两个痛点
  • 【leetCode】2810. 故障键盘
  • xshell7连接ubuntu18.04
  • 真正的力量:实力与人际关系的平衡艺术
  • Acwing.1388 游戏(区间DP对抗思想)
  • Numpy数组转换为csv文件
  • 替代安全指标(Surrogate Safety Measures (SSM) )
  • usb_camera传输视频流编码的问题记录!
  • Linux安装nginx保姆级教程
  • leetcode-判断二分图
  • 算法day30 回溯6
  • 分享three.js实现乐高小汽车
  • gpt的构造和原理
  • 基于springboot实现教师人事档案管理系统项目【项目源码+论文说明】计算机毕业设计
  • K8S之Job和CronJob控制器