正在研究一个程序,将一个数学表达式作为一个字符串,然后对其进行评估并发现一种奇怪的行为。给定
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]){
int ary[4];
char * string = "123+11";
for (int i = 0; i < 3; i++){
ary[i] = atoi(&string[i]);
printf("%d\n", ary[i]);
}
}
我得到了输出:
123
23
3
虽然我可能期望得到输出:
1
2
3
这是atoi()
功能的一部分吗?
答案 0 :(得分:4)
这是正确的行为,因为atoi
将指向char的指针作为输入并将其转换为int
,直到找到&#34; \0
&#34;字符。
char * string = "123";
&#34; \0
&#34;字符串在123之后出现。
声明:
ary[0] = atoi(&string[0]);
atoi
从1开始将其转换为int
直到123。
声明:
ary[1] = atoi(&string[1]);
atoi
从2开始将其转换为int
直到23。
声明:
ary[2] = atoi(&string[2]);
atoi
以3开头将其转换为int
直到3。
如果不清楚,请告诉我。
答案 1 :(得分:1)
user3758647给出的答案是正确的。要解决您的问题,您可以使用strtok
函数,该函数根据分隔符对输入字符串进行标记。
char* string = "123+23+22";
char *token = strtok(string, "+");
int arr[4], i = 0;
arr[i] = atoi(token); //Collect first number here
while (token != NULL)
{
token = strtok(NULL, " ");
//You can collect rest of the numbers using atoi function from here
i++;
arr[i] = atoi(token);
//Do whatever you want to do with this number here.
}
return 0;