C中的示例应用程序,它采用2个位置参数

时间:2013-10-15 08:18:24

标签: c bash gcc positional-operator

我正在寻找一个简单应用程序的示例,它将使用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 checksum C app上的维基百科文章中提取了我想要处理的内容,该文章接受一个字符串并为其计算MD5校验和。我似乎无法确定他们将位置参数传递给应用程序的部分。

这有点不同,我明白,因为它已提示用户提供答案然后将其分配给值。我宁愿在第一个实例中将它用作位置参数。

2 个答案:

答案 0 :(得分:2)

Bash(等人)中的$1在C程序中是argv[1]

#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;
}

参数argcargv数组中有效条目的数量。 argv[0]是可执行文件名,您最多可以访问argv[argc - 1]。 (实际上你也可以访问argv[argv],它始终是NULL指针。

答案 1 :(得分:1)

正如Joachim所说,将$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){