C语言大厂面试技巧及strcpy()函数示例详解
目录
- 1、什么是优秀的代码?
- 2、常见的coding技巧有哪些?
- 3、以模拟实现strcpy为例
- (1)了解strcpy()函数
- (2)正片开始(危)
- 1.第一阶段(面试官:最多5分)
- 2.第二阶段(面试官:最多7分)
- 3.第三阶段的代码:(面试官:最多8分)
- 4.第四阶段(面试官:完美代码!10分!)
1、什么是优秀的代码? 1. 代码运行正常
2. bug很少
3. 效率高
4. 可读性高
5. 可维护性高
6. 注释清晰
7. 文档齐全
2、常见的coding技巧有哪些? 1. 使用assert
2. 尽量使用const
3. 养成良好的编码风格
【C语言大厂面试技巧及strcpy()函数示例详解】4. 添加必要的注释
5. 避免编码的陷阱。
3、以模拟实现strcpy为例
(1)了解strcpy()函数
文章图片
作用:将源字符串里的字符拷贝到目标字符串中去。
注意:字符串的结束标志'\0'也会拷贝过去。
证明如下:
文章图片
(2)正片开始(危)
1.第一阶段(面试官:最多5分)
#includevoid my_strcpy(char* dest, char* src){ while (*src!='\0') {*dest = *src; dest++; src++; } *dest = *src; //处理字符串的结束标志'\0' //*dest = '\0'; 这样处理并非是不行,但是会给阅读代码的造成一种错觉\ 即这个'\0'是自己放进去的,而不是从源字符串拷贝进去的}int main(){ char arr1[20] = { 0 }; char arr2[] = "hello"; my_strcpy(arr1, arr2); printf("%s\n", arr1); return 0; }
缺点:如果传的实参是空指针,就会出现问题,因为空指针是无法进行解引用的。
解决方法:使用assert()进行断言,()里面放的是表达式。使用assert需要引用头文件。
说明:assert(),括号中的表达式如果不满足,编译器就会报错。
2.第二阶段(面试官:最多7分)
#include#includevoid my_strcpy(char* dest, char* src){ assert(dest != NULL); assert(src != NULL); //当然,此处也可以将两个合并成一个:assert( dest && src ) while (*src!='\0') {*dest = *src; dest++; src++; } *dest = *src; }int main(){ char arr1[20] = { 0 }; char arr2[] = "hello"; my_strcpy(arr1, arr2); printf("%s\n", arr1); return 0; }
下面是图片演示,加入传入一个空指针就会出现下面的报错。
文章图片
3.第三阶段的代码:(面试官:最多8分)
#include#includevoid my_strcpy(char* dest, char* src){ assert( dest && src ); while(*dest++ = *src++)//'\0'的ascii码值为0,为假,会退出循环 {; }}int main(){ char arr1[20] = { 0 }; char arr2[] = "hello"; my_strcpy(arr1, arr2); printf("%s\n", arr1); return 0; }
4.第四阶段(面试官:完美代码!10分!) 通过对比发现,与库函数中的函数还相差一个const,以及返回类型不同。
文章图片
#include#includechar * my_strcpy(char* dest, const char* src)//const可以防止源字符串被改变{ assert( dest && src ); char* ret = dest; while(*dest++ = *src++) {; } return ret; }int main(){ char arr1[20] = { 0 }; char arr2[] = "hello"; printf("%s\n", my_strcpy(arr1, arr2)); return 0; }
以上就是C语言面试技巧及strcpy()函数示例详解的详细内容,更多关于C语言面试技巧及strcpy()函数的资料请关注脚本之家其它相关文章!
推荐阅读
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- C语言解方程的根和判断是否是闰年
- C语言的版本比较
- 【C】题目|【C语言】题集 of ⑥
- echart|echart 双轴图开发