Panggilan sistem() gagal dengan parameter yang mengandungi ruang
Apabila menggunakan system() untuk melaksanakan atur cara yang mengambil parameter yang mengandungi ruang, a ralat biasa yang dihadapi ialah:
The filename, directory name, or volume label syntax is incorrect.
Ini berlaku apabila kedua-dua laluan boleh laku dan laluan parameter mengandungi ruang.
Sebagai contoh, kod berikut:
<code class="cpp">#include <stdlib.h> #include <conio.h> int main() { system("\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\""); _getch(); }</code>
menjana mesej ralat disebabkan oleh kehadiran ruang dalam laluan "pdftotext" dan laluan fail PDF.
Masalah ini timbul kerana system() menghantar hujahnya kepada cmd /k, yang mentafsir aksara petikan pertama sebagai permulaan nama boleh laku dan watak petikan kedua sebagai akhir nama boleh laku. Akibatnya, baris arahan dihuraikan secara tidak betul, membawa kepada ralat.
Untuk menyelesaikan isu ini, arahan itu boleh disertakan dalam petikan berganda:
<code class="cpp">system("\"\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"\"");</code>
Sebagai alternatif, cmd /S boleh digunakan untuk memaksa baris arahan ditafsirkan dengan ketat tanpa peraturan penghuraian khas:
<code class="cpp">system("cmd /S /C \"\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"\"");</code>
Dengan menggunakan penyelesaian ini, panggilan sistem() boleh berjaya melaksanakan program dengan parameter yang mengandungi ruang.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Program dengan Parameter yang Mengandungi Ruang Menggunakan `system()` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!