找工作_笔试_C_01

上网搜索一些好的C笔试题,收藏了,感谢原作者:

1. C,C++经典笔试题(答案)

2. strcpy的写法:

(1)[精华] 出现频率最高的笔试题strcpy写法

char * strcpy(char * strDest,const char * strSrc)
        {
                if ((strDest==NULL)||(strSrc==NULL)) //[1]
                        throw "Invalid argument(s)"; //[2]

                char * strDestCopy=strDest;   //[3]                

while ((*strDest++=*strSrc++)!='\0'); //[4]                

return strDestCopy;
        }

(2) C/C++——strcpy函数的实现 和解析

char *strcpy(char *strDest, const char *strSrc)
{
    assert((strDest!=NULL) && (strSrc !=NULL));    // 2分
    char *address = strDest;                                    // 2分
    while( (*strDest++ = * strSrc++) != '\0' )        
    // 2分只有当*ch1 = '\0'的时候才会退出循环
              NULL ; 
    return address ;                                                  
  
// 2分
}

strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?
答:为了实现链式表达式。                                         // 2分
例如       int length = strlen( strcpy( strDest, “hello world”) );


char* strcpy1(char *strDest, const char* strSrc)
{
        assert(strSrc != NULL );
        assert(strDest != NULL);
        int i;
        char *address = strDest;
 
    for(i = 0; strSrc[i] != '\0'; i++)
              strDest[i] = strSrc[i];
       strDest[i] = '\0';
 
        return address;
}

3. strcpy的写法:

(1) strlen和sizeof的区别

sizeof(...)是运算符, 在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*), 且必须是以'\0'结尾的。

char str[20]="0123456789"; 
int a=strlen(str); //a=10; 
int b=sizeof(str); //而b=20; 

附1: 复制时大小注意!

     

// String的普通构造函数  

        String::String(const char *str)       // 6分
{
   
 if(str==NULL)    
     
{
       
m_data = new char[1];     // 若能加 NULL 判断则更好
       
*m_data = ‘ 0’;  
     
}
     
else
     
{
       
int length = strlen(str);  

// char *m_data;
       
m_data = new char[length+1];   // 若能加 NULL 判断则更好    

       
strcpy(m_data, str);
     
}
}


4. memcpy的写法

(1) 笔试题02-自己实现memcpy 

void *myMemCopy(void *dest,const void *src,size_t count)
{
    char *pDest=(char *)(dest);
    const char *pSrc=(const char *)(src);


    //目的地址和源地址重叠,从源地址的末尾方向开始拷贝
     if( pDest>pSrc && pDest<pSrc+count )
    {
        pDest = pDest + count-1;
        pSrc = pSrc + count-1;
        while(count--){
            *pDest-- = *pSrc--;
        }
    }
    //目的地址和源地址不重叠,从源地址的开始方向拷贝
    else
    {
        while(count--){
              *pDest++ = *pSrc++;
        }
    }

    return pDest;
}

(2) 【面试题】实现memcpy函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值