C语言:命令行输入转换为带ASCII数学错误的整数:初始化从指针生成整数而不进行强制转换
我正在尝试使用ASCII数学将命令行参数转换为整数。 我们已经知道输入参数是2到10之间的整数。 这是我的密码: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; ^~~~ 请
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数学来解决它。