在C中将字符转换为int,然后将值打印为int?

在C中将字符转换为int,然后将值打印为int?,c,int,C,Int,当我运行代码时,我不断得到这些奇怪的负值。是否有人知道它们是什么,以及如何得到一个int(例如10、20、8…)?为什么我总是得到不同的错误值?当我用参数2和3运行代码时,它应该输出10 int main(int argc, char *argv[]) { int h; int a; int b; a = (int) argv[1]; b = (int) argv[2]; if (argc == 3) { h = 2 * (a + b); printf("

当我运行代码时,我不断得到这些奇怪的负值。是否有人知道它们是什么,以及如何得到一个int(例如10、20、8…)?为什么我总是得到不同的错误值?当我用参数2和3运行代码时,它应该输出10

int main(int argc, char *argv[]) {
  int h;
  int a;
  int b;
  a = (int) argv[1];
  b = (int) argv[2];
  if (argc == 3) {
    h = 2 * (a + b);
    printf("The perimeter of the rectangle is %d\n", h);
  } else {
    fprintf(stderr, "Usage: %s <arguments>\n", argv[0]);
  }
}

Output:
The perimeter of the rectangle is -1874251136
or
The perimeter of the rectangle is -1424723328
or
The perimeter of the rectangle is -940059169
intmain(intargc,char*argv[]){
int-h;
INTA;
int b;
a=(int)argv[1];
b=(int)argv[2];
如果(argc==3){
h=2*(a+b);
printf(“矩形的周长为%d\n”,h);
}否则{
fprintf(stderr,“用法:%s\n”,argv[0]);
}
}
输出:
矩形的周长为-1874251136
或
矩形的周长为-1424723328
或
矩形的周长为-940059169

argv
是指向
char
的指针数组。也就是说,它是一个字符串数组。字符串
“1”
不等于整数
1
(甚至不等于字符
'1'
)。事实上,你正在做一个演员几乎总是一个危险信号

要将字符串转换为数字,请使用函数

在访问
argv
之前,请始终记住选中
argc

b = (int)argv[2]
(int)
是指针值的强制转换——它只是转换类型


相反,请尝试使用
atoi
strtol
将字符串转换为整数值。

测试太晚

if(argc==3){
测试所需的
argc
,但不幸的是在使用
argv[1],argv[2]
之后。请将测试移到前面,并在不需要时退出。注意:正确使用错误消息
stderr

if (argc != 3) {
  fprintf(stderr,"Usage: %s <arguments>\n", argv[0]);
  return -1; // or return EXIT_FAILURE
}  
if(argc!=3){

fprintf(stderr),用法:%s

Er…您正在将
char*
变量转换为
int
?为什么?这到底应该完成什么?如果您想将包含数字的字符串转换为int,您需要使用
strtol()
或类似的东西。
#include <stdlib.h>

// a = (int)argv[1];
a = atoi(argv[1]);