Пример приложения на 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){

Другие вопросы по тегам