Pat*_*erí 1 c command-line-arguments
我在C中有这段代码:
int x = 52706108;
if(argc >= 2){
int val = *argv[1];
int xor = x^val;
printf("The xor value between %d and %d is %d in decimal\n",x,val,xor);
}
Run Code Online (Sandbox Code Playgroud)
我正在编译它像这样:
gcc -m32 -g -o a5_1 a5_1.c
Run Code Online (Sandbox Code Playgroud)
像这样运行:
./a5_1 12
Run Code Online (Sandbox Code Playgroud)
这是我的输出:
The xor value between 52706108 and 49 is 52706061 in decimal
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么我传递参数"12",但机器正在读取49.
这49是1您的字符串参数中的ASCII代码点12.那是因为argv是一个char 指针数组,每个指针都指向一个包含参数的C字符串.所以,这是因为如果你已经定义argv[1]为{'1', '2', '\0').
如果要将参数转换为整数,请使用以下内容:
int num = atoi (argv[1]);
Run Code Online (Sandbox Code Playgroud)
或者,最好进行错误检查,并避免在数量超出范围时出现未定义的行为:
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.
Run Code Online (Sandbox Code Playgroud)
完整示例:
#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;
}
Run Code Online (Sandbox Code Playgroud)
该程序的输出(12作为参数给出)是:
Xor between 52706108 and 12 is 52706096 in decimal
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |