Saya menulis kode yang harus menampilkan parameter utama, tetapi ketika saya mengkompilasinya dan mengetikkan "*" program menunjukkan struktur file saya. Perintah dalam cmd terlihat seperti ini:program.exe 1 2 3 *
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const* argv[]) {
for (int i=0; i<argc; i++) printf("%s\n", argv[i]);
return 0;
}
Hasilnya adalah:
program
1
2
3
program.c
program.exe
10-03-20
11-02-20
Dan pertanyaan saya: Apakah mungkin memaksa program untuk mencetak "*" alih-alih daftar file. Terima kasih atas sarannya
c
parameters
mingw
main
wildcard-expansion
stasio14
sumber
sumber
*
ditafsirkan oleh shell, bukan program itu sendiri. Gunakan\*
atau"*"
untuk meneruskan * ke program.*
dikonversi"file1 file2 ..."
oleh shell Anda. Tidak ada yang salah dengan program C Anda (meskipun termasuk<stdlib.h>
tidak perlu). Untuk mencegah shell mengonversi tanda bintang gunakan tanda kutip:program.exe 1 2 3 "*"
char const* argv[]
tidak benar. Anda tidak dapat menemukan bentuk main () sendiri, hanya kompiler yang dapat melakukannya.argv
sebenarnya membaca / menulis memori, meskipun menulis itu sering bukan ide terbaik.Jawaban:
mingw menyebabkan program melakukan ekspansi wildcard dari parameter. Tambahkan yang berikut ke program Anda untuk menonaktifkan perilaku ini:
Di dunia unix, shell diharapkan melakukan ekspansi wildcard.
Di dunia Windows, ekspansi wildcard diserahkan ke aplikasi.
Itu membuat menulis program portabel rumit. Karena mingw sering digunakan untuk mengkompilasi program yang tidak ditulis dengan Windows dalam pikiran, pustaka runtime C melakukan ekspansi wildcard dari parameter secara otomatis.
a.c
:Tapi, mingw memberikan jalan keluar. Menambahkan hal berikut ke program Anda menonaktifkan perilaku ini:
a.c
:sumber