scanf: 用於從標準輸入中讀取格式化的數據。

例如:

char str[100];

scanf("%s", str);

strlen 用於計算字串的長度,即字串中字符的數量,直到遇到結束字符 '\0' 為止

size_t length = strlen(str);

 

[C語言] scanf 和 strlen 一起用 會發生什麼如果你在 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

創作者介紹
創作者 檸檬的C語言初學日誌 的頭像
檸檬

檸檬的C語言初學日誌

檸檬 發表在 痞客邦 留言(0) 人氣( 44 )