C 語言中的system() 函數由於參數中存在空格而導致的故障
使用C 語言中的system() 函數執行帶有參數的程式時包含空格,可能會導致有關不正確的檔案名稱、目錄名稱或磁碟區標語法的錯誤。當可執行檔的路徑和參數檔路徑都包含空格時,就會出現此問題。
例如:
在此程式碼中,system() 函數嘗試執行「pdftotext」具有兩個參數的可執行檔。但是,可執行路徑和參數路徑中都存在空格會觸發錯誤。
問題原因
system() 函數將其參數傳遞給cmd /k 指令,依照特定規則解釋參數。其中一條規則規定,如果命令列恰好包含兩個引號字符,引號之間沒有特殊字符,且該字串是可執行檔的名稱,則保留引號字符。
但是,在範例程式碼中,引號之間的字串包含空格,違反了規則。因此,cmd /k 命令將該字串解釋為無效的可執行檔名稱並產生錯誤。
解決方案
要解決此問題,請將整個命令括在附加文件中引號:
這確保整個命令字符字串被解析為一個參數,防止cmd /k 指令誤解它。
此外,為了確保字串始終被解析根據正確的規則,您可以包含 /S 開關:
以上是當參數包含空格時,為什麼 C system() 函數會失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!