これは、文字列引数49
の ASCII コード ポイントです。これは、 がポインタの配列であり、それぞれが引数を含む C 文字列を指すためです。つまり、あたかも と定義したかのようです。1
12
argv
char
argv[1]
{'1', '2', '\0')
引数を整数に変換する場合は、次のようにします。
int num = atoi (argv[1]);
または、できればエラーチェックを使用し、数値が範囲外の場合に未定義の動作を回避します。
char *nextChar;
long num = strtol (argv[1], &nextChar, 10);
if ((nextChar == argv[1]) || (*nextChar != '\0')) {
// Is either empty or has invalid characters.
return -1;
}
// String was non-empty and all-numeric.
完全な例:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[]) {
long x = 52706108;
if (argc >= 2) {
char *nextChar;
long val = strtol (argv[1], &nextChar, 10);
if ((nextChar == argv[1]) || (*nextChar != '\0')) {
printf ("Invalid input '%s'\n", argv[1]);
return -1;
}
long xor = x^val;
printf("Xor between %ld and %ld is %ld in decimal\n",x,val,xor);
}
return 0;
}
そのプログラムの出力 (12
引数として指定された場合) は次のとおりです。
Xor between 52706108 and 12 is 52706096 in decimal