gpt4 book ai didi

C 中的命令行参数 - 传递 12,机器读取 49

转载 作者:太空宇宙 更新时间:2023-11-04 00:39:59 26 4
gpt4 key购买 nike

我在 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);
}

我是这样编译的:

gcc -m32 -g -o a5_1 a5_1.c

像这样运行它:

./a5_1 12

这是我的输出:

The xor value between 52706108 and 49 is 52706061 in decimal

我不明白为什么我要传递参数“12”,但机器读取的是 49。

最佳答案

49 是您的string 参数121 的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

关于C 中的命令行参数 - 传递 12,机器读取 49,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13023862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com