【问题标题】:Convert char to int in C and then printf the value as int?在C中将char转换为int,然后将值printf为int?
【发布时间】:2019-02-07 11:23:08
【问题描述】:

我在运行代码时不断收到这些奇怪的负值。有谁知道它们是什么以及如何获得一个 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

【问题讨论】:

  • 呃...您将char * 变量转换为int?为什么?这到底是为了什么?如果要将包含数字的字符串转换为 int,则需要使用 strtol() 或类似的东西。

标签: c int


【解决方案1】:

测试太晚了

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()'

【讨论】:

    【解决方案2】:

    argv 是指向char指针 数组。 IE。它是一个字符串的数组。字符串"1"等于整数1(甚至字符'1')。您进行演员阵容这一事实几乎总是一个危险信号。

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

    并且永远记得检查argc之前访问argv

    【讨论】:

      【解决方案3】:
      b = (int)argv[2]
      

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

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

      【讨论】:

        猜你喜欢
        • 2012-11-15
        • 1970-01-01
        • 2015-12-18
        • 2015-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多