C 주요 파라미터


9

나는 주요 매개 변수를 표시 해야하는 코드를 작성했지만 컴파일하고 "*"프로그램을 입력하면 파일 구조가 표시됩니다. cmd의 명령은 다음과 같습니다.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;
}

결과는 다음과 같습니다.

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

그리고 내 질문 : 프로그램이 파일을 나열하는 대신 "*"를 인쇄하도록 할 수 있습니까? 조언 감사합니다


5
*쉘이 아닌 프로그램 자체에 의해 해석됩니다. 사용 \*또는 "*"프로그램에 *를 전달합니다.
MCH

5
문제는 쉘 *"file1 file2 ..."의해 변환 된다는 것 입니다 . C 프로그램에는 아무런 문제가 없습니다 (포함 <stdlib.h>하지 않아도 됨). 쉘이 별표 를 변환하지 못하도록하려면 :program.exe 1 2 3 "*"
pmg

도움을 주셔서 감사합니다
stasio14

질문과 관련이 없지만 엄격하게 말하면 char const* argv[]정확하지 않습니다. main () 형식을 직접 만들 수는 없으며 컴파일러만이 가능합니다. argv쓰기는 종종 최선의 아이디어는 아니지만 실제로 읽기 / 쓰기 메모리입니다.
Lundin

1
Windows cmd 쉘은 와일드 카드 확장을 수행하지 않습니다. cmd 셸에서 실행되지 않거나 컴파일러가 셸에서 수행 할 확장을 에뮬레이트하는 논리를 삽입하고 있습니다.
ikegami

답변:


5

mingw는 프로그램이 매개 변수의 와일드 카드 확장을 수행하게합니다. 이 동작을 비활성화하려면 프로그램에 다음을 추가하십시오.

int _CRT_glob = 0;

유닉스 세계에서 쉘은 와일드 카드 확장을 수행 할 것으로 예상됩니다.

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

Windows 환경에서는 와일드 카드 확장이 응용 프로그램에 맡겨집니다.

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

따라서 이식 가능한 프로그램 작성이 까다로워집니다. mingw는 종종 Windows로 작성되지 않은 프로그램을 컴파일하는 데 사용되므로 C 런타임 라이브러리는 매개 변수의 와일드 카드 확장을 자동으로 수행합니다.

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

그러나 mingw는 아웃을 제공합니다. 프로그램에 다음을 추가하면이 동작이 비활성화됩니다.

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
*
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.