由于某些原因,我的C程序拒绝将argv的元素转换为int,我无法弄清楚原因。
int main(int argc, char *argv[])
{
fprintf(stdout, "%s\n", argv[1]);
//Make conversions to int
int bufferquesize = (int)argv[1] - '0';
fprintf(stdout, "%d\n", bufferquesize);
}
这是运行./test 50时的输出:
50
-1076276207
我尝试删除(int),同时抛出一个*和一个&在(int)和argv [1]之间 - 前者给了我5但不是50,但后者给了我类似于上面的输出。删除 - ' 0'操作并没有多大帮助。我也尝试先制作一个char = argv [1]并首先使用转换来进行转换,这很奇怪,不管输入如何都给了我一个17。
我非常困惑。发生了什么事?
答案 0 :(得分:52)
尝试使用atoi(argv[1])
(“ascii to int”)。
答案 1 :(得分:12)
argv[1]
是char *
而不是char
,您无法将char *
转换为int
。如果你想将argv [1]中的第一个字符更改为你可以做的int。
int i = (int)(argv[1][0] - '0');
我刚刚写了这个
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char **argv) {
printf("%s\n", argv[1]);
int i = (int)(argv[1][0] - '0');
printf("%d\n", i);
return 0;
}
并像这样运行
./testargv 1243
得到了
1243
1
答案 2 :(得分:3)
您只是想将char*
转换为int,这当然没有多大意义。您可能需要这样做:
int bufferquesize = 0;
for (int i = 0; argv[1][i] != '\0'; ++i) {
bufferquesize *= 10; bufferquesize += argv[1][i] - '0';
}
然而,假设您的char*
以“\ 0”结尾,它应该是,但可能不需要这样做。
答案 3 :(得分:2)