回覆列表
  • 1 # 使用者9119320568657

    用 fgets() 限定長度,保證輸入的記憶體安全;用 strtoint() 簡單轉換。

    strtoint() 可以寫成過程,如果使用 stdlib.h 的 atoi(),對於太長的字串,atoi() 文件裡也沒有說有任何限制。直接轉換,int 可能存放不下。那麼只能巢狀迴圈,對 str[] 內每一個字母進行轉換(所以這步 "ch" - "0" 就可以)。(參考:atoi - C++ Reference)陣列每一位儲存一個數字。避免使用 scanf() 這個可能重寫緩衝區的函式。----------------------我還是有點擔心對 str* 的指標呼叫,寫 char str[] 和 char* str 有區別嗎?反正前面這個是錯的。最搞不清楚指標了。-----------------------更新:新問題:fgets(str, length, stdin); 會把第一次呼叫的標準流繼續放入第二次呼叫,第一次結尾是個分行符,第二次呼叫就直接退出。用迴圈巢狀 getch()?這輸入流的爛設計,根本就不所謂“安全”。

  • 中秋節和大豐收的關聯?
  • 成語什麼膽相照?