【问题标题】:Converting char to integer causing seg fault将字符转换为整数导致段错误
【发布时间】:2014-02-16 21:12:28
【问题描述】:

以我正在从事的项目中的以下示例为例。我要做的是从一个强者那里获取这个角色,并将其存储在变量 m 中。在这种情况下,mORi 是一个包含 L(5) 的字符串。我只对这个字符感兴趣(在这种情况下是 5)。我可以使用 m 捕获该字符,但是当我尝试将其转换为整数时,我的程序段错误。我假设我在某处超出了某个边界。一定缺少一些超级简单的东西。任何帮助,将不胜感激。

char m;
m = mORi[2]; //trying to get third char from string
int mber = atoi(m); // seg faults here

我在编译时收到以下警告:

warning: passing argument 1 of ‘atoi’ makes pointer from integer without a cast [enabled by default]

我不确定为什么它似乎假设它是一个整数而不是一个字符。

【问题讨论】:

  • atoi 需要一个指向字符串的指针作为输入参数
  • 使用atoi(&mORi[2]);它传递了一个字符串,这是atoi() 需要的——见证警告。 char 被提升为 int,但 atoi() 需要一个指针,因此您将 int 转换为不是您想要的指针。编译器确实试图提供帮助!
  • 所以我经常与指针/地址空间作斗争......这就像编程的青春期吗?只是随着时间而来?有没有关于它们的基本教程?
  • 抱歉没有教程。但是你必须意识到指针并没有什么特别之处。它们不保存整数或字符,而是保存内存地址。如果要查看内存地址处的值,可以使用* 来获取指定的内存地址处的值。除此之外,它就像编程中的一切:练习。

标签: c


【解决方案1】:

atoi 转换字符串(指向NULL 终止字符数组的指针),而不是char。如果要将char 转换为int,只需减去'0'

char m;
m = mORi[2]; //trying to get third char from string
int mber = m - '0';

【讨论】:

    【解决方案2】:

    这是使用atoi 的替代方法:

    char m[2];
    m[0] = mORi[2]; //trying to get third char from string
    m[1] = 0; // NULL-terminating
    int mber = atoi(m); // OK
    

    【讨论】:

      猜你喜欢
      • 2014-12-16
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多