-1
int 
main(int argc, char *argv[]) {
    int n;
    if (2 <= *argv[1] && *argv[1] <= 20){
         n = *argv[1];

    return 0;
}

所以我试图设置 n = argv[1] 的值。输入是"C: myprogram 4" 这样,输出应该是 4。但是当我打印 n 的值时,我得到了 52。这是为什么呢?

4

3 回答 3

3

'4'is not 4but的 ASCII 码52。如果您想要实际数字而不是字符串,请使用atoi(argv[1])将第一个参数转换为整数。

于 2013-06-01T10:06:17.943 回答
0

当您通过命令行参数传递某些内容时,它们默认为字符流并分配给**argv. 当您获取时,argv[i][j]您会得到一个字符。

如果你这样做,argv[i]你会得到一个适合你的字符串"4"。所以,你正在尝试的是错误的。

你得到的原因52是字符的ascii值452 使用内置的,atoi(str)你可以将字符串转换为"438"整数438 参考这段代码:

 #include<stdio.h>
int 
main(int argc, char *argv[]) {
    int n=-1;  //initialized to prevent garbage incase if case fails
    if (2 <= atoi(argv[1]) && atoi(argv[1]) <= 20){
         n = atoi(argv[1]);
    }
    printf("%d",n);  
    return 0;
}
于 2013-06-01T10:20:48.873 回答
0

注意类型argv[i]

main(int argc, char* argv[])
                 ^
                 | argv[i] is a string.

如果您索引和访问它的元素,*argv[i]它基本上是一个char 而不是 int。这就是'4'解释为52char 的 ASCII 值的原因'4'

要将和argv[i]值视为整数,请将其转换为 int。更好地转换使用int atoi (const char * str);

int n = atoi(argv[i]);

注意:以下都是不同的:

   4   is a int
   '4'  is a char
   "4" is a string (\0 terminated)

argc此外,最好使用--argument counter检查传递给 main 的参数数量。

 if(argc < NoOfArgumentsNeeded) {
     // print error and exit
 }
于 2013-06-01T10:16:04.000 回答