1

我正在寻找一个简单的应用程序示例,该应用程序将用于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 中制作上述代码的示例。我不是在尝试将 a 转换bash script为 a C app,而是在尝试使用它。我从关于MD5 校验和 的 Wikipedia 文章中得出了我想要处理的想法,该文章C app接受一个字符串并为其计算 MD5 校验和。我似乎无法弄清楚他们将位置参数传递给应用程序的哪一部分。

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

4

2 回答 2

2

$1Bash(等)中的内容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;
}

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

于 2013-10-15T08:22:17.313 回答
1

正如 Joachim 所说,也替换$0argv[0], (假设 str 是 a char*):

scanf("%s",&posParam);
           ^ there is no need to use &, posParam is already a pointer.

if ( posParam == "X" ){

字符串不能与 比较==,而是使用:

if (strcmp(posParam, "X") == 0){

于 2013-10-15T08:51:38.383 回答