我正在寻找一个简单应用程序的示例,它将使用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校验和。我似乎无法确定他们将位置参数传递给应用程序的部分。
这有点不同,我明白,因为它已提示用户提供答案然后将其分配给值。我宁愿在第一个实例中将它用作位置参数。
答案 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;
}
参数argc
是argv
数组中有效条目的数量。 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){