2

我正在制作的这个 C 程序从命令行读取一组字符并使用数组 (argv[]) 像这样存储它们

main (int argc, char *argv[])  {
int temp;
     /*prevents no arguments*/
if (argc==1){
    printf("Usage;\t[0 < integers < 9] [operators]\n");
    exit(0);
}
int i;
for (i = 0 ; i<argc; i++){
    temp = argv[i] - '0';
    printf("this is char %d ; %d\n",i, temp);
}
}

但是我在命令行中运行它之后得到的只是这样;

    program 2 4 1 - +

是随机垃圾

    this is char 0 ; -4195956
    this is char 1 ; -4195950
    this is char 2 ; -4195948
    this is char 3 ; -4195946
    this is char 4 ; -4195944
    this is char 5 ; -4195942

我投射温度的方式有问题吗?还是我只是错误地理解了指针(在 *argv[] 中)?

4

4 回答 4

1

argv[i] - 只是一个指向 C 字符串的指针;你需要第一个元素:

temp = argv[i][0] - '0';
于 2012-11-28T05:24:59.403 回答
0

的每个元素argv都是一个字符串,而不是一个特定的字符。argv是一个多维数组,你只索引第一个维度。您需要获取每个嵌套数组的第一个(第零个)元素:

temp = argv[i][0] - '0';
于 2012-11-28T05:25:58.567 回答
0
char *argv[]

argv是一个指向 char 的指针数组。指向 char 的指针也是如此argv[X](对于合适的 X)。指针算术也是如此argv[X] - some_integral_value,并返回一个指针(如果定义了减法)。

要访问第一个元素,您需要argv[X][0].

请注意,这argv[0]不是第一个参数,而是(通常)程序名称。参数从argv[1].

于 2012-11-28T05:26:38.183 回答
0

对于数字,您可以使用atoi(str)以下函数:

temp = atoi(argv[i]);

代码:

for (i = 0 ; i<argc; i++){
    if (argv[i][0] < '0' || argv[i][0] > '9')
        printf("Operator = %s\n", argv[i]);
    else {
        temp = atoi(argv[i]);
        printf("this is char %d ; %d\n",i, temp);
    }
}

您可以使用单独的字符数组来存储运算符..

于 2012-11-28T05:38:20.203 回答