Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言:命令行输入转换为带ASCII数学错误的整数:初始化从指针生成整数而不进行强制转换_C - Fatal编程技术网

C语言:命令行输入转换为带ASCII数学错误的整数:初始化从指针生成整数而不进行强制转换

C语言:命令行输入转换为带ASCII数学错误的整数:初始化从指针生成整数而不进行强制转换,c,C,我正在尝试使用ASCII数学将命令行参数转换为整数。 我们已经知道输入参数是2到10之间的整数。 这是我的密码: int key = argv[2] - 48; printf("%d", key); 这是我收到的错误信息 warning: initialization makes integer from pointer without a cast [-Wint-conversion] int key = argv[2] - 48; ^~~~ 请

我正在尝试使用ASCII数学将命令行参数转换为整数。 我们已经知道输入参数是2到10之间的整数。 这是我的密码:

int key = argv[2] - 48;
printf("%d", key);
这是我收到的错误信息

warning: initialization makes integer from pointer without a cast [-Wint-conversion]
 int key = argv[2] - 48;
           ^~~~

请帮忙。谢谢。

argv
具有类型
char**
,即指向
char*
字符串的指针,后跟
NULL
指针(C标准,§5.1.2.1:2)

argv[2]
是一个
char*
指针,而不是单个
char
。您的操作不是对任何字符的数值执行算术运算,而是对指针执行算术运算

如果要对包含由
argv[2]
指向的字符串的
char
值执行算术运算,可以访问其单个字符,如下所示:

size_t len = strlen(argv[2]);
size_t i;

for(i = 0; i < len; i++)
{
    permute(argv[2][i]); // made up function name
}
size\u t len=strlen(argv[2]);
尺寸i;
对于(i=0;i
命令行参数中的argv表示指向字符的指针数组。i、 e.argv[1]表示字符数组。e、 g.您将122作为参数传递,那么argv[1]是['1','2','2']。
所以,如果要将字符数组转换为整数,必须使用atoi函数<代码>int key=atoi(argv[1])

argv
是一个指针数组或甚至
int key=argv[1][0]-“0”不知道细节。更好的方法是,对(i=0;argv[2][i];i++)使用
strol()
就足够了,不需要使用
strlen()
。参数是以nul结尾的字符串。标准引用做得很好。我不能使用atoi()函数。这是一个作业,我们只能用ASCII数学来解决它。