• 華為筆試題之十五

    時間:2022-07-11 13:36:02 筆試 我要投稿
    • 相關推薦

    華為筆試題之十五

    華為最新筆試題及其分析

    華為筆試題之十五

    1.printf的輸出問題

    printf("%d",total);//this is right
    printf(total);//this is wrong
    printf("hello");//but this is right

    2.整數類型的長度
    char 1個子節,8位

    unsigned short [int]
    [signed] short int
    short 2個字節,16位

    [signed] int
    unsigned int
    int 型在vc里是4個子節,32位,也可能是16位,2個字節

    long [int]
    unsigned long [int]

    long型都是32位,4個字節

    float 32 ,4

    double 64,8

    long double 128,16

    char 8,一個字節,存放的實際上是字符的ascii碼

    3、找出錯誤并改正

    char *my_cpy(char* src, int len){
    char dest[1024];
    memcpy(dest, src, len);
    return dest;
    }
    上面的函數是否有問題,如果有指出其所在,如果沒有,給出函數功能描述。

    答案:
    1。數組應該初始化
    2。memcpy不判斷是否越界,所以調用前應該判斷是否越界
    3。不應該返回rest,因為這個數組是在函數內部申請的,所以函數結束之后就會消失,指針也會變成“野指針”,所以指向非法地址
    最后一個比較隱蔽

    char *memcpy( char *dest, const char *src,int len )
    {
    char* pDest = (char*)dest;
    char* pSrc = (char*)src;
    int pos;
    for(pos=0;pos {
    pDest[pos] = pSrc[pos];
    }
    return (char*)pDest;
    }

    存在地問題就是沒有判斷指針是否非法assert(dest !=NULL || src != NULL); 條件為 FLASE 顯示

    不調用其他函數,寫一個memcpy的函數,函數原型為
    void *memcpy(void *dest, void *src, size_t length);

    -----------利用好斷言---------


    void memcpy(void* pvTo, void* pvFrom, size_t size)
    {
    void* pbTo = (byte*)pvTo;
    void* pbFrom = (byte*)pvFrom;
    ASSERT(pvTo != NULL && pvFrom != NULL);

    ASSERT(pbTo>=pbFrom+size || pbFrom>=pbTo+size);
    while(size-->0)
    *pbTo++ == *pbFrom++;
    return(pvTo);
    }

    -----------------------

    常見函數編程:
    char *strcpy(char *strDest, const char *strSrc)
    {
    ASSERT(strDest != NULL && strSrc != NULL);
    char *addr = strDest;
    while(*strDest++=*strSrc++)
    NULL; //NULL可以省略,但更有利于編譯器發現錯誤
    }
    return addr;
    }

    void *memcpy(void *dest, const void *src, int count)
    {
    ASSERT(dest!= NULL && src!= NULL);
    for(int i=0; i< cout; i++)
    {
    dest = src;
    }
    }
    int strcmp(const char*str1, const char *str2)
    {
    while (str1 != NULL && str2 != NULL)
    {
    if(*str1 < *str2) return -1;
    else if(*str1 > *str2) return 1;
    else { str1++; str2++;}
    }
    if(str1 == NULL && str2 != NULL)
    return -1;
    else if(str1 != NULL && str2 == NULL)
    return 1;
    else return 0;
    }

    //way2: more compact
    int strcmp(const char*str1, const char *str2)
    {
    int i = strlen( str1 );
    int j;
    for(j=0; j<=i; j++)
    {
    if(str1[j] > str2[j]) return 1; //if str2 terminates, then str2[j]=0, str1[j]>str2[j], return 1;
    else if(str1[j] < str2[j]) return -1;
    else if(str1[j] == \) return 0;
    }
    }
    //way3: optimize again.
    int strcmp(const char * str1, const char * str2 )
    {
    while(1)
    {
    if(*str1 > *str2) return 1;
    else if(*str1 < *str2) return -1;
    else if(*str1 == \) return 0;
    str1++;str2++;
    }
    }

    【華為筆試題之十五】相關文章:

    華為硬件筆試題目08-11

    親歷華為面試06-18

    華為面試經歷06-18

    華為新員工報到Q&A(華為入職須知)04-27

    華為面試問題03-24

    華為幾號發工資04-19

    華為都有哪些部門02-28

    華為資格面試內容08-10

    華為d2怎么樣,華為d2好嗎?08-01

    簡筆與繁筆教學設計05-27

    黄频国产免费高清视频_富二代精品短视频在线_免费一级无码婬片aa_精品9E精品视频在线观看