面试时遇到些strcpy()函数,本来挺简单的,但是面试官的一番描述让我有些不知道怎么下手

我当时觉得考虑内存重叠问题就可以了,但是他说的不是我理解的那样,然后就一直卡在那了,不过面试官很有耐心,我自己都开始嫌弃自己的理解能力了。不过面试官还是耐心的给我解释具体的情况。。唉,很可惜,还是自己学得不够,要深刻反思。

接下来实现考虑内存重叠的strcpy的函数

注意事项:

1. 判断输入参数的合法性。

2. 要有返回的参数

3. 别忘了复制字符串末尾的'\0'

4. 如果内存有重叠,则倒着复制

char* mystrcpy(char* dst, const char* src)
{assert(dst != NULL);assert(src != NULL);if (dst == src)return dst;int size = strlen(src) + 1;if (dst < src || src + size <= dst){char* d = dst;const char* s = src;while (size--)*d++ = *s++;}else{char* d = dst + size - 1;const char* s = src + size - 1;while (size--)*d-- = *s--;}return dst;
}

面试题:strcpy考虑内存重叠相关推荐

  1. 笔试题strcpy写法

    [精华] 出现频率最高的笔试题strcpy写法 http://www.chinaunix.net 作者:HopeCao  发表于:2008-10-30 15:49:14 [发表评论] [查看原文] [ ...

  2. 函数 —— strncpy() (内存重叠) memcpy() memmove() 一个字符串拷贝给另一个字符串

    char *strncpy(char *dest, const char *src, size_t n) *strncpy(char *dest, const char *src, size_t n) ...

  3. 对内存重叠的深入认识

    内存重叠:拷贝的目的地址在源地址范围内.所谓内存重叠就是拷贝的目的地址和源地址有重叠. 在函数strcpy和函数memcpy都没有对内存重叠做处理的,使用这两个函数的时候只有程序员自己保证源地址和目标 ...

  4. 从memcpy到memmove,内存函数拷贝与内存重叠问题(重点内容)

    有一个关于拷贝的问题,假如有这样一个字符串 char a[]="hello"; 我需要把这个字符串拷进另一个变量中 char a1[10]; 好像方法蛮多的,比如strcpy #d ...

  5. memcpy内存重叠的解决

    内存重叠:拷贝的目的地址在源地址范围内.所谓内存重叠就是拷贝的目的地址和源地址有重叠. 在函数strcpy和函数memcpy都没有对内存重叠做处理的,使用这两个函数的时候只有程序员自己保证源地址和目标 ...

  6. memcpy内存重叠问题

    memcpy内存重叠 之前一直没有注意到内存复制函数的内存重叠问题.今天偶遇遂琢磨了一下,记之. 函数简介:c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始 ...

  7. memcpy和memmove的区别以及内存重叠问题

    memcpy和memmove的区别以及内存重叠问题 转自:https://www.codecomeon.com/posts/89/ 区别 memcpy() 和 memmove() 都是C语言中的库函数 ...

  8. C++面试题-指针-动态内存指针

    C++面试题-指针-动态内存指针 问:什么是内存泄漏和内存溢出? 答:内存泄漏:在程序申请内存后,该内存不再会被引用,但是不能释放该内存空间.如果你delete指针之后,该空间不能归还,自己又不能进行 ...

  9. 腾讯面试题:服务器内存1G,有一个2G的文件,里面每行存着一个QQ号(5-10位数),怎么最快找出出现过最多次的QQ号。

    腾讯最新面试题:服务器内存1G,有一个2G的文件,里面每行存着一个QQ号(5-10位数),怎么最快找出出现过最多次的QQ号. 以下是个人所建第Algorithms_12群内朋友的聊天记录: 首先你要注 ...

最新文章

  1. Oracle动态采样学习
  2. ScrollView 内嵌 ListView 只能看到第一个Item
  3. java容器有哪些如何使用_Java容器有哪些?
  4. MSVCR80D.dll not found 问题(转)
  5. visual studio2008 OpenGL开发配置
  6. 工程中选择数据结构和算法的依据
  7. c#中Excel数据的导入、导出
  8. 输入网址后发生了什么
  9. python获取当前时间的源代码_python怎么获取当前系统时间
  10. java web jsp页面,jsp引入页面 Java Web JSP详解(下)
  11. 小米9pro计算机打不开,小米9 Pro刷机教程,线刷升级更新官方系统包
  12. 魔兽世界个人插件、宏、WA 使用记录
  13. 计算机软考软件设计师2019试题,软考2019下半年软件设计师上午真题.pdf
  14. iOS开发者账号过期续费
  15. 如何修改windows某类后缀文件的图标和系统文件夹的图标
  16. Visual SLAM: What are the Current Trends and What to Expect?
  17. GitHub上最火的两份Java面试小册,Star已经超百万
  18. JSP网站开发技术两种模式介绍
  19. drupal 6.0 入门教程 - 第一章
  20. 实施工程师面试题(答案)

热门文章

  1. 【Linux设置系统时间】
  2. python入门指南by许半仙百度云-Python入门指南 作者:许半仙(4)
  3. 【JAVA】删除整个文件夹(深度删除)
  4. effective java之 builder模式
  5. C++在线编辑器:cpp.sh
  6. 4星|《维米尔的帽子》:17世纪荷兰画中的全球化踪迹,鸦片与烟草被当时中国主流文化接纳的故事...
  7. linux yum安装mysql及配置
  8. bootstrap 查询条件布局
  9. C#笔记进阶篇03 抽象函数与抽象类
  10. 【英语】及物动词和不及物动词的区别vt、vi