針對C語言功力測試題的講解分析

字號:

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