【问题标题】:Converting a char * to int [duplicate]将 char * 转换为 int [重复]
【发布时间】:2016-08-24 14:28:16
【问题描述】:

您好,我有以下代码,但由于某种原因出现错误,似乎无法弄清楚原因。

warning: return makes integer from pointer without a cast

我的代码是:

long convertToInt(char *convert) {
        char *p = convert;
        while(*p){
            if(isdigit(*p)) {
                long val = strtol(p, &p, 10);
                return val;
            } else {
                p++;
            }
        }
    return NULL;
}

【问题讨论】:

  • 为什么要将指针转换为整数?
  • 有一种代码味道,它是convertToInt,意思是一个int,而不是一个long,这是一种误导。
  • 您能否说明您打算如何使用convertToInt 函数?答案可能取决于此。

标签: c pointers char int


【解决方案1】:

您的函数返回long。所以把return语句改成:

return 0L;

NULL 的一个可能定义是(void *)0,当您return 时,它被转换为long

【讨论】:

    【解决方案2】:

    NULL 是一个指针,而不是一个整数。它可以实现为扩展为 0(整数常量)或 ((void *)0) 空指针常量的 #define。如果您想返回一个表示“发生错误”的值,您可能需要返回一个整数常量。值 0 和 -1 是传统的。

    更好的是返回成功/失败的布尔状态值,并通过指针参数返回值:bool_t convertToInt(const char *s, long *value)。示例见标准库函数strtol

    【讨论】:

    • bool_t?我猜你的意思是bool
    • 是的,bool,不是 bool_t。
    【解决方案3】:

    问题出在这里:

    return NULL;
    

    你在哪里返回NULL,但函数的返回类型是long


    此外,您的函数名为convertToInt(),但它返回一个long,这意味着一个convertToLong() 函数名称。

    【讨论】:

      【解决方案4】:

      正确的代码是,假设convert 是一个带有数字的字符串:

      long convertToLong(char *convert) {
          long val = 0L;
          char *p = convert;
          while (isdigit(*p)){
              val = val * 10 + (*p - '0');
              p++;
          }
          return val;
      }
      

      【讨论】:

        猜你喜欢
        • 2012-10-19
        • 1970-01-01
        • 2018-08-22
        • 1970-01-01
        • 2013-05-29
        • 2012-08-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多