scanf: 用於從標準輸入中讀取格式化的數據。
例如:
char str[100];
scanf("%s", str);
strlen: 用於計算字串的長度,即字串中字符的數量,直到遇到結束字符 '\0' 為止。
size_t length = strlen(str);
如果你在 scanf 中使用 %s 格式符來讀取字串,並且該字串沒有以 null 結束('\0'),則 strlen 可能會導致未定義的行為。因為 strlen 需要遍歷整個字串,直到找到結束字符 '\0'。
char str[100];
scanf("%s", str);
// 此時 str 未必以 '\0' 結束
size_t length = strlen(str);
為了避免這個問題,你應該確保從 scanf 讀取的字串是以 '\0' 結束的。可以使用 %99s 來確保 scanf 不會讀取超過 str 陣列的大小:
char str[100];
scanf("%99s", str);
// 確保 str 以 '\0' 結束
size_t length = strlen(str);
這樣,即便 scanf 讀取的字符數超過 99 個,str 仍然會以 '\0' 結束,strlen 就可以正確計算長度。
Reference: ChatGPT
延伸學習: https://open.alipay.com/portal/forum/post/128001100
請先 登入 以發表留言。