switch (a) {
case 1: continue; // 編譯錯誤:continue not in loop
}
continue/break只能出現在for/while/do-while循環體內,switch不算循環。
char a[280]; for (int i=0; i<280; i++) a[i] = -1-i; // a[255]=0, a[256]=-257... strlen(a); // 255:從a[0]開始找到第一個\0 char *str = "12340987\0 56"; strlen(str); // 8:\0處停止,後面不算 char test[] = "12340987 56"; // 無\0,編譯器自動加\0 strlen(test); // 11
區別:sizeof編譯期得類型大小,strlen運行期掃描內存找\0。
sizeof(p) = 8 sizeof(*p) = 1 ----------------------- sizeof(a) = 100 sizeof(a[100]) = 1 sizeof(&a) = 8 sizeof(&a[0]) = 8 ----------------------- in fun sizeof(b) = 8 ----------------------- strlen(a) = 0 (初始未初始化,可能非0) strlen(a) = 255 (賦值後a[255]=0) strlen(str) = 8 strlen(test) = 11 \0 = 0
_Bool/stdbool.h替代自定義布爾continue嚴禁用於switchsizeof不求值、數組參數退化、區分數組/指針strlen依賴\0、不檢查緩衝區邊界