我有这段代码,但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++;
}
}
答案 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) ;
}