找工作_笔试_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函数

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章