在C中将字符串转换为整数时的奇怪行为
他正在编写一个程序,将一个数学表达式作为字符串,然后对它求值,发现了一个奇怪的行为。给定在C中将字符串转换为整数时的奇怪行为,c,string,C,String,他正在编写一个程序,将一个数学表达式作为字符串,然后对它求值,发现了一个奇怪的行为。给定 #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++){
#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()
函数的一部分吗?这是正确的行为,因为atoi
将指向char的指针作为输入,并将其转换为int
,直到找到“\0
”字符
char * string = "123";
字符串中的“\0
”出现在123之后
对于声明:
ary[0] = atoi(&string[0]);
ary[1] = atoi(&string[1]);
ary[2] = atoi(&string[2]);
atoi
从1开始,将其转换为int
直到123
对于声明:
ary[0] = atoi(&string[0]);
ary[1] = atoi(&string[1]);
ary[2] = atoi(&string[2]);
atoi
从2开始,将其转换为int
直到23
对于声明:
ary[0] = atoi(&string[0]);
ary[1] = atoi(&string[1]);
ary[2] = atoi(&string[2]);
atoi
从3开始将其转换为int
直到3
如果不清楚,请告诉我。这是正确的行为,因为
atoi
将指向char的指针作为输入,并将其转换为int
,直到找到“\0
”字符
char * string = "123";
字符串中的“\0
”出现在123之后
对于声明:
ary[0] = atoi(&string[0]);
ary[1] = atoi(&string[1]);
ary[2] = atoi(&string[2]);
atoi
从1开始,将其转换为int
直到123
对于声明:
ary[0] = atoi(&string[0]);
ary[1] = atoi(&string[1]);
ary[2] = atoi(&string[2]);
atoi
从2开始,将其转换为int
直到23
对于声明:
ary[0] = atoi(&string[0]);
ary[1] = atoi(&string[1]);
ary[2] = atoi(&string[2]);
atoi
从3开始将其转换为int
直到3
如果不清楚,请告诉我。用户3758647给出的答案是正确的。要解决这个问题,可以使用
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;
用户3758647给出的答案是正确的。要解决这个问题,可以使用
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;
对您想提取一位数吗?那么为什么不干脆
string[i]-“0”
atoi
和strtod
解析整个字符串。请记住,atoi
是数组到int,而不是ascii到int。是的!您想提取一位数吗?那么为什么不干脆string[i]-“0”
atoi
和strtod
解析整个字符串。请记住,atoi
是数组到int,而不是ascii到int。实际上,它会进行转换,直到找到一个非数字字符(不一定是\0
)^并且允许有一个前导的+
或-
,它进行转换,直到找到一个非数字字符(不一定是\0
)^,并且允许有一个前导+
或-