49
是字符串中的1
的ASCII碼點參數12
。這是因爲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
護理擴大? –
@PatricioJerí,擴展實現:-) – paxdiablo
ARGV的元素是字符指針,而不是整數。在將其用作整數之前,您需要將字符串轉換爲整數。 –