>>> 如果要獲得這個字元串的長度,則一定要使用 strlen
1 2 3 4 5 | char Array[2000] = {'0'}; sizeof(Array) == 2000; char *p = Array; strlen(p) == 1;//sizeof(p)結果為4 //在傳遞一個數組名到一個函數中時,它會完全退化為一個指針 |
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include #include using namespace std; int main(void) { char* ss = "0123456789"; cout << sizeof(ss) << endl; //結果 4 ===》ss是指向字元串常量的字元指針 cout << sizeof(*ss) << endl; //結果 1 ===》*ss是第一個字元 //大部分編譯程序 在編譯的時候就把sizeof計算過了 是類型或是變數的長度 //這就是sizeof(x)可以用來定義數組維數的原因 return 0; } |
1 2 3 4 5 6 7 8 9 10 11 | #include #include using namespace std; int main(void) { char ss[] = "0123456789"; cout << sizeof(ss) << endl; //結果 11 ===》ss是數組,計算到\0位置,因此是10+1 cout << sizeof(*ss) << endl; //結果 1 ===》*ss 是第一個字元 return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include #include using namespace std; int main(void) { char q[]="abc"; char p[]="a\n"; cout << sizeof(q) << endl; cout << sizeof(p) << endl; cout << strlen(q) << endl; cout << strlen(p) << endl; return 0; } //結果是 4 3 3 2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include #include using namespace std; class X { int i; int j; char k; }; X x; int main(void) { cout< cout< return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include #include using namespace std; struct O { int a,b,c,d,e,f,g,h; }; int main(void) { char szPath[MAX_PATH] char const * static_string = "Hello"; cout << sizeof(static_string) << endl; //是 sizeof 一個指針,所以在 32bit system 是 4 char stack_string[] = "Hello"; cout << sizeof(stack_string) << endl; //是 sizeof 一個數組,所以是 sizeof(char[6]) char * string = new char[6]; strncpy(string,"Hello",6"); cout << sizeof(string) << endl; //是 sizeof 一個指針,所以還是 4。和第一個不同的是,這個指針指向了動態存儲區而不是靜態存儲區。 //不管指針指向的內容在什麼地方,sizeof 得到的都是指針的大小 system("PAUSE"); return 0; } |
1 2 3 4 5 6 7 8 | #include #include typedef unsigned int u_int; u_int Mystrlen(const char*str){ u_int i; assert(str!=NULL); for(i=0;str[i]!='\0';i++); return i; } |
1 2 3 4 5 6 | unsigned int strlen(const char*str){ assert(str!=NULL);unsigned int len=0; while((*str++)!='\0') len++; return len; } |
1 2 3 4 5 6 | unsigned int strlen(const char*str){ assert(str); const char*p=str; while(*p++!=0); return p-str-1; } |
1 2 3 4 5 | unsigned int strlen(const char*str){ assert(str); if(*str==0) return 0; else return(1+strlen(++str)); } |
1 2 3 4 5 6 | size_t strlen(const char*s){ const char*sc; for(sc=s;*sc!='\0';++sc); return sc-s; } |
1 2 3 4 5 | size_t strlen(const char * str) { const char *cp = str; while(*cp++) return(cp-str-1); } |
目錄