Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah fungsi sistem C() gagal apabila parameter mengandungi ruang?

Mengapakah fungsi sistem C() gagal apabila parameter mengandungi ruang?

Barbara Streisand
Barbara Streisandasal
2024-10-28 06:34:02472semak imbas

Why does the C   system() function fail when parameters contain spaces?

Fungsi sistem C() Tidak Berfungsi Akibat Ruang dalam Parameter

Apabila menggunakan fungsi sistem() dalam C untuk melaksanakan program dengan parameter mengandungi ruang, ia mungkin mengakibatkan ralat mengenai nama fail, nama direktori atau sintaks label volum yang salah. Isu ini timbul apabila kedua-dua laluan boleh laku dan laluan fail parameter mengandungi ruang.

Contohnya:

<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>

Dalam kod ini, fungsi sistem() cuba melaksanakan "pdftotext" boleh laku dengan dua parameter. Walau bagaimanapun, kehadiran ruang dalam kedua-dua laluan boleh laku dan laluan parameter mencetuskan ralat.

Punca Isu

Fungsi sistem() menghantar argumennya kepada arahan cmd /k, yang mentafsirkan hujah mengikut peraturan tertentu. Salah satu peraturan ini menyatakan bahawa jika baris arahan mengandungi betul-betul dua aksara petikan, tiada aksara khas antara petikan dan rentetan ialah nama fail boleh laku, maka aksara petikan itu dikekalkan.

Walau bagaimanapun, dalam kod contoh, rentetan antara petikan mengandungi ruang, melanggar peraturan. Akibatnya, arahan cmd /k mentafsir rentetan sebagai nama boleh laku yang tidak sah dan menghasilkan ralat.

Penyelesaian

Untuk menyelesaikan isu ini, sertakan keseluruhan arahan dalam tambahan petikan:

<code class="cpp">system("\"\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"\"");</code>

Ini memastikan bahawa keseluruhan rentetan arahan dihuraikan sebagai satu hujah, menghalang arahan cmd /k daripada menyalahtafsirkannya.

Selain itu, untuk menjamin bahawa rentetan sentiasa dihuraikan mengikut peraturan yang betul, anda boleh memasukkan suis /S:

<code class="cpp">system("cmd /S /C \"\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"\"");</code>

Atas ialah kandungan terperinci Mengapakah fungsi sistem C() gagal apabila parameter mengandungi ruang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn