在c程序中使用atoi

时间:2014-03-04 14:45:46

标签: c atoi

我有这段代码,但atoi根本不起作用 如果我给了基地址,那么它也会导致问题

int main()
{
    char *token;
    int value;
    char data = "23+100";
    int i = 0;
    while(data[i] != '+' )
    {
        value = atoi(data[i]);
        push(value,&top1);
        i++;
    }
}

3 个答案:

答案 0 :(得分:1)

此:

char data = "23+100";

真的不应该编译。

应该是:

const char *data = "23+100";

这将使atoi(data[i]);更加正确。

另外,你不应该在子字符串上使用atoi()。也许你应该看看sscanf()strtok(),或者(如果我理解你正确理解了你的内容后最好的话)strtol()

后者允许您解析long整数,直到找到非数字字符,并且还可以让您找出通话后的字符。

答案 1 :(得分:0)

数组初始化错误,可能是

char data[] = "23+100"

或放松告诉

const char *data = "23+100"

还有一件事,你通过数组的逻辑可能是错误的。

一旦遇到+,循环就完成了,100 won't被转换并推送到堆栈上(希望你试图实现它)

答案 2 :(得分:0)

查看strtol功能。以下示例显示了如何使用它。

int main()
{
  char *token;
  int value;
  char *data = "23+100-2*7";
  int i = 0;
  char *endp ;
  token = data ;

  do
  {
    value = strtol(token, &endp, 10) ;
    token = endp + 1 ;
    printf ("value: %d\n", value) ;

    if (*endp != 0)
      printf ("operator: %c\n", *endp) ;

  } while (*endp != 0) ;
}