C ana parametre


9

Ana parametreleri görüntülemek zorunda olan bir kod yazdım, ama derlediğimde ve "*" programına yazdığımda dosya yapımı gösteriyor. Cmd'deki komut şuna benzer: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;
}

Sonuç:

program
1
2
3
program.c
program.exe
10-03-20
11-02-20

Benim sorum: Programı dosyaları listelemek yerine "*" yazdırmaya zorlamak mümkün mü? Tavsiyede teşekkürler


5
*Kabuk, değil programın kendisi tarafından yorumlanır alır. Programa * geçmek için \*veya tuşlarını kullanın "*".
MCH

5
Sorun, kabuğunuz tarafından *dönüştürülmesidir "file1 file2 ...". C programınızla ilgili yanlış bir şey yoktur (dahil <stdlib.h>etmek gerekli değildir). Kabuğun yıldızı dönüştürmesini önlemek için tırnak işaretlerini kullanın:program.exe 1 2 3 "*"
pmg

yardım için teşekkürler
stasio14

Soru ile ilgili değil, ama kesinlikle konuşmak char const* argv[]doğru değil. Main () formlarını kendiniz icat edemezsiniz, sadece derleyici bunu yapabilir. argvaslında en iyi fikir olmasa da, belleğe okumak / yazmaktır.
Lundin

1
Windows cmd kabuğu joker karakter genişletmesi gerçekleştirmez. Ya cmd kabuğundan çalıştırılmıyor ya da derleyici kabuğun yapacağı genişlemeyi taklit etmek için mantık
ekliyor

Yanıtlar:


5

mingw, programın parametrelerde joker karakter genişletmesi yapmasına neden olur. Bu davranışı devre dışı bırakmak için aşağıdakileri programınıza ekleyin:

int _CRT_glob = 0;

Unix dünyasında, kabuğun joker karakter genişletmesi gerçekleştirmesi bekleniyor.

$ perl -le'print for @ARGV' *
a
b

Windows dünyasında, joker karakter genişletmesi uygulamaya bırakılmıştır.

>perl -le"print for @ARGV" *
*

Bu, taşınabilir programlar yazmayı zorlaştırır. Mingw genellikle Windows göz önünde bulundurularak yazılmayan programları derlemek için kullanıldığından, C çalışma zamanı kitaplığı parametrelerin otomatik olarak joker karakter genişletmesini gerçekleştirir.

a.c:

#include <stdio.h>

int main(int argc, char const* argv[]) {
    for (int i=0; i<argc; i++)
        printf("%s\n", argv[i]);

    return 0;
}
>gcc -Wall -Wextra -pedantic-errors a.c -o a.exe & a *
a
a.c
a.exe

Ancak, mingw bir çıkış sağlar. Programınıza aşağıdakileri eklemek bu davranışı devre dışı bırakır:

int _CRT_glob = 0; 

a.c:

#include <stdio.h>

int _CRT_glob = 0; 

int main(int argc, char const* argv[]) {
    for (int i=0; i<argc; i++)
        printf("%s\n", argv[i]);

    return 0;
}
>gcc -Wall -Wextra -pedantic-errors a.c -o a.exe & a *
a
*
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.