如何正确地将程序参数* char转换为int?

时间:2010-12-01 12:34:20

标签: c pointers casting char

我使用的是Mac OS X 10.6.5,使用XCode 3.2.1 64位来构建一个构建配置为10.6的C命令行工具。调试| x86_64的。我想传递一个正整数作为参数,所以我将argv的索引1作为一个int。这似乎工作,除了似乎我的程序获取ascii值而不是读取整个char数组并转换为int值。当我进入'progname 10'时,它告诉我我已进入49,这是我进入'progname 1'时也得到的。如何让C将整个char数组作为int值读取?谷歌只展示了我(int)* charPointer,但显然这不起作用。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int main(int argc, char **argv) {
    char *programName = getProgramName(argv[0]); // gets the name of itself as the executable
    if (argc < 2) {
        showUsage(programName);
        return 0;
    }
    int theNumber = (int)*argv[1];
    printf("Entered [%d]", theNumber);            // entering 10 or 1 outputs [49], entering 9 outputs [57]
    if (theNumber % 2 != 0 || theNumber < 1) {
        showUsage(programName);
        return 0;
    }

    ...

}

4 个答案:

答案 0 :(得分:12)

argv数组中的数字是字符串表示形式。您需要将其转换为整数。

sscanf

int num;
sscanf (argv[1],"%d",&num);

atoi()(如果有)

答案 1 :(得分:9)

转换无法做到这一点,您需要实际解析文本表示并转换为整数。

此经典函数称为atoi(),但也有strtol()甚至sscanf()

答案 2 :(得分:1)

假设你有一个9作为参数。你说你得到57,ascii值。

使用int num = *arg[1] - '0'将为您提供所需数字的事实。

如果它是一个更大的数字,如572,那么你需要

char *p = argv[1];
int nr = 0;
int i;
for(i =0; i< strlen(p); i++) {
    nr = 10 * nr + p[i] - '0';
}

添加一些错误检查及其好处。

或者,根据你拥有的东西,你可以使用atoi(),sscanf()等函数。

答案 3 :(得分:0)

使用atoi()strol()个功能。