49 是 string 参数 12 中 1 的 ASCII 码点。这是因为argv 是一个char 指针数组, 每个指针都指向一个包含参数的C 字符串。因此,就好像您已将 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