1

printf位置パラメーターに基づいて 2 つの異なる文字列を表現するために使用する単純なアプリの例を探しています。

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 scriptaを aに変換しようとしているのではなくC app、いじってみようとしています。文字列を取り、その MD5 チェックサムを計算する MD5 チェックサム に関するウィキペディアの記事から、取り組みたいことのアイデアを引き出しました。C appアプリケーションに渡す位置パラメーターを取得する部分を理解できないようです。

これは、ユーザーに回答を提供し、それを値に割り当てるように求めているため、少し異なります。最初のインスタンスでは、位置パラメータとして使用したいと思います。

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

引数は、配列argc内の有効なエントリの数です。は実行ファイル名で、 までアクセスできます。(実際にはアクセスすることもできます。これは常にポインターです)。argvargv[0]argv[argc - 1]argv[argv]NULL

于 2013-10-15T08:22:17.313 に答える
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){

于 2013-10-15T08:51:38.383 に答える