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

Barbara Streisand
Lepaskan: 2024-10-28 06:34:02
asal
556 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan