Пример приложения на C, которое принимает 2 позиционных параметра
Я ищу пример простого приложения, которое будет использовать printf
чтобы выразить две разные строки на основе позиционного параметра.
В bash
Я хотел бы использовать:
case $1 in
-h | --help ) showHelp
exit
;;
* ) manPipe
exit 1
esac
И до этого я бы перечислил, что функция называется showHelp
будет вызван, если операторы либо $ foo -h
или же $ foo -help
в терминал. Что-нибудь еще, как $ foo -bar
попросил бы функцию manPipe
будет вызван.
У меня есть этот код до сих пор:
#include <stdio.h>
#include <cstring>
int secretFunction() {
printf("Success! You found the secret message!");
}
int main() {
str posParam;
posParam = X;
printf("Enter a number:");
scanf("%s",&posParam);
if ( posParam == "X" ){
printf("Welcome to app!\nType: " + $0 + " t\nto show a message");
}else{
if (posParam == "t" ){
secretFunction();
}
return 0;
}
return 0;
Я знаю, что этот код действительно дрянной, я пытался сделать пример кода выше в bash. Я не пытаюсь преобразовать bash script
в C app
Я пытаюсь поиграть с этим. Я нарисовал идею чего-то, над чем хочу поработать, из статьи в Википедии о контрольной сумме MD5 C app
это берет строку и вычисляет контрольную сумму MD5 для этого. Я не могу понять, какую часть они получают позиционный параметр для передачи в приложение.
Это немного отличается, я понимаю, потому что это побудило пользователя предоставить ответ, а затем назначить его значение. Я бы предпочел использовать его как позиционный параметр в первую очередь.
2 ответа
Что такое $1
в Баш (и др.) есть argv[1]
в программе на C:
#include <stdio.h>
int main(int argc, char *argv[])
{
if (argc > 1)
{
printf("You provided at least one argument (or parameter)\n");
printf("The first argument is \"%s\"\n", argv[1]);
}
return 0;
}
Аргумент argc
количество действительных записей в argv
массив. argv[0]
имя исполняемого файла, и вы можете получить доступ к argv[argc - 1]
, (На самом деле вы можете получить доступ argv[argv]
а это всегда NULL
указатель).
Как говорит Иоахим, замени $0
с argv[0]
также (при условии, что str является char*
):
scanf("%s",&posParam);
^ there is no need to use &, posParam is already a pointer.
if ( posParam == "X" ){
строки нельзя сравнивать с ==
вместо этого используйте:
if (strcmp(posParam, "X") == 0){