【面试题】写出完整版的strcpy函数

摘自牛客网:

char * strcpy( char *strDest, const char *strSrc )  //加入const表明是输入参数
{
    assert( (strDest != NULL) && (strSrc != NULL) ); //断言,判断是否为空
    char *address = strDest; 
    while( (*strDest++ = * strSrc++) != ‘\0’ ); 
    *address='\0';
    return address; //返回了目的地址,可实现链式操作
}

  1. const
  • 关于const修饰指针的情况,分为四种:(摘抄自《程序员面试宝典》49页)

    • const int a = &b*
    • int const a = &b
      如果const位于星号的
      侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
      如果const位于星号的
      侧,则const就是修饰指针本身,即指针本身是常量。
      所以1、2种情况,都是对内容
      a不能进行修改。可先不初始化。
    • int const a = &b*
      指针本身是常量,不能对指针本身进行更改操作,而指针所指向的内容不是常量。所以定义必须初始化。
    • const int const a = &b*
      指针本身和指向的内容均为常量。
  • const成员函数
    不改变类的数据成员,加上const提高程序可读性和可靠性。

class Point {
 …
public:
        int GetY() const;
…
}
int Point::GetY() const { //函数末尾加const
        return yVal;
}
- const放在函数声明前,则表示返回值是常量。
  • const与#define相比有什么不同?
    C++语言可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多优点。
    const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误。
    有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。在C++程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
  1. 断言
    assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。

  2. memcpy

void* memcpy(void *dst, const void *src, size_t count)      
{      
    //安全检查  
    assert( (dst != NULL) && (src != NULL) );      
  
    unsigned char *pdst = (unsigned char *)dst;      
    const unsigned char *psrc = (const unsigned char *)src;      
  
    //防止内存重复  
    assert(!(psrc<=pdst && pdst<psrc+count));      
    assert(!(pdst<=psrc && psrc<pdst+count));      
  
    while(count--)      
    {      
        *pdst = *psrc;      
        pdst++;      
        psrc++;      
    }      
    return dst;      
}    
  • memcpy和strcpy区别:
    摘自:http://blog.csdn.net/vgxpm/article/details/47614901
    a、strcpy只能应用字符类型的复制,而memcpy应用范围更广,任何类型都可以;
    b、memcpy相比使用strcpy会更加的安全,当然也可以使用strcpy的安全版本strncpy函数;(多了count参数指定拷贝字节大小)
    c、strcpy一定会拷贝字符串结尾符'\0',memcpy在拷贝字符串的时候,根据指定拷贝字节数拷贝字符串,是否拷贝‘\0’结束符,根据count的大小;
    d、在拷贝相同的字符串,且字节数相同(包括‘/0’)的情况下,strcpy效率比memcpy效率更快。(strcpy需要控制两个变量,但是memcpy多一个count参数)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.写一个NSString类的实现 +(id)initWithCString:(c*****t char *)nu...
    韩七夏阅读 9,193评论 2 37
  • 史上最全的iOS面试题及答案 迷途的羔羊--专为路痴量身打造的品牌。史上最精准的定位。想迷路都难!闪电更新中......
    南虞阅读 5,441评论 0 8
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 6,435评论 0 7
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 5,706评论 0 4
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 6,120评论 0 12

友情链接更多精彩内容