Я написал код, который должен отображать основные параметры, но когда я скомпилировал его и набрал "*", программа показывает структуру моего файла. Команда в 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
И мой вопрос: можно ли заставить программу печатать "*" вместо перечисления файлов. Спасибо за совет
c
parameters
mingw
main
wildcard-expansion
stasio14
источник
источник
*
Получает интерпретатором, а не сама программа. Используйте\*
или"*"
для передачи * в программу.*
конвертируется в"file1 file2 ..."
вашу оболочку. В вашей C-программе нет ничего плохого (хотя в<stdlib.h>
этом нет необходимости). Чтобы предотвратить преобразование звезды в оболочку, используйте кавычки:program.exe 1 2 3 "*"
char const* argv[]
это не правильно. Вы не можете сами придумывать формы main (), это может делать только компилятор.argv
фактически является памятью для чтения / записи, хотя запись в нее часто не самая лучшая идея.Ответы:
Mingw заставляет программу выполнять подстановку параметров подстановочными знаками. Добавьте следующее в вашу программу, чтобы отключить это поведение:
Ожидается, что в мире Unix оболочка будет выполнять расширение по шаблону.
В мире Windows расширение подстановочных знаков оставлено на усмотрение приложения.
Это делает написание портативных программ сложным. Поскольку mingw часто используется для компиляции программ, которые не были написаны для Windows, его библиотека времени выполнения C выполняет автоматическое раскрытие параметров с помощью подстановочных знаков.
a.c
:Но Mingw обеспечивает выход. Добавление следующего к вашей программе отключает это поведение:
a.c
:источник