2

私が作成しているこのCプログラムは、コマンドラインから一連の文字を読み取り、配列(argv [])を使用してそれらを保存します

main (int argc, char *argv[])  {
int temp;
     /*prevents no arguments*/
if (argc==1){
    printf("Usage;\t[0 < integers < 9] [operators]\n");
    exit(0);
}
int i;
for (i = 0 ; i<argc; i++){
    temp = argv[i] - '0';
    printf("this is char %d ; %d\n",i, temp);
}
}

しかし、そのようにコマンドラインで実行した後に得られるのはすべてです。

    program 2 4 1 - +

ランダムゴミです

    this is char 0 ; -4195956
    this is char 1 ; -4195950
    this is char 2 ; -4195948
    this is char 3 ; -4195946
    this is char 4 ; -4195944
    this is char 5 ; -4195942

temp をキャストする方法に何か問題がありますか? それとも、(*argv[] 内の) ポインターの概念が間違っているのでしょうか?

4

4 に答える 4

1

argv[i] - C 文字列へのポインタです。最初の要素が必要です:

temp = argv[i][0] - '0';
于 2012-11-28T05:24:59.403 に答える
0
char *argv[]

argvchar へのポインターの配列です。charargv[X]へのポインターも同様です (適切な X の場合)。ポインターargv[X] - some_integral_value演算も同様で、ポインターを返します (減算が定義されている場合)。

最初の要素にアクセスするには、 が必要argv[X][0]です。

argv[0]は最初の引数ではなく、(通常) プログラム名であることに注意してください。引数は から始まりargv[1]ます。

于 2012-11-28T05:26:38.183 に答える
0

の各要素はargv、特定の文字ではなく、文字列です。argvは多次元配列であり、最初の次元のみにインデックスを付けています。ネストされた各配列の最初 (0 番目) の要素を取得する必要があります。

temp = argv[i][0] - '0';
于 2012-11-28T05:25:58.567 に答える
0

atoi(str)数値の場合、次のように関数を使用できます。

temp = atoi(argv[i]);

コード:

for (i = 0 ; i<argc; i++){
    if (argv[i][0] < '0' || argv[i][0] > '9')
        printf("Operator = %s\n", argv[i]);
    else {
        temp = atoi(argv[i]);
        printf("this is char %d ; %d\n",i, temp);
    }
}

別の char 配列を使用して演算子を格納できます。

于 2012-11-28T05:38:20.203 に答える