針對(duì)C語(yǔ)言功力測(cè)試題的講解分析

字號(hào):

int x=35;
    char str[10];
    //問:strlen(str)和sizeof(str)的值分別是多少?
    // strlen(str) 值不確定,strlen根據(jù)’\0’確定字符串是否結(jié)束。
    // sizeof(str)=10 sizeof一個(gè)數(shù)組為數(shù)組長(zhǎng)度
    strcpy(str,"www.it315.org"/*共13個(gè)字母*/);
    //問:此時(shí)x和strlen(str)的值分別是多少?
    // x 為35
    // strcpy(char* dest, const char* src)
    // 根據(jù)src來復(fù)制dest,依照src的’\0’決定復(fù)制的長(zhǎng)度,而dest必須要提供足夠的長(zhǎng)度,這里會(huì)引起溢出,strlen返回13,但是數(shù)組外部的數(shù)據(jù)已經(jīng)被破壞
    str="it315.org";//編譯能通過嗎?
    // 數(shù)組不能賦值,只能初始化。char str[10] = "it315.org";
    // 而且初始化時(shí)編譯器會(huì)檢查數(shù)組的長(zhǎng)度與初始化串的長(zhǎng)度是否匹配
    char *pstr;
    strcpy(pstr,"http://www.it315.org);
    //上句編譯能通過嗎?運(yùn)行時(shí)有問題嗎?
    // 可以通過編譯,但是pstr指向了常量區(qū),運(yùn)行時(shí)只做讀操作,寫操作不保險(xiǎn)