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

Convert char to int in C and then printf the value as 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

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

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

并且永远记得在访问argv.

之前检查argc
b = (int)argv[2]

(int) 是指针值的转换——它只是转换类型

尝试使用 atoistrtol 将字符串转换为整数值。

测试太晚

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
}  

转换不正确

代码正在转换指针而不是引用的文本。

#include <stdlib.h>

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

健壮的代码会使用 strtol() 或者你自己的 `strtoi()'