假设我有char x[3] = "123";
并且我想只转换23
char 数组的索引 1 和 index2 "",我可以通过atoi
吗?
我知道我可以做到,char z[2]; z[0]=x[1]; z[1]=x[2]; atoi(z);
但这不是我所要求的。
你可以这样做
char x[4];
int i;
strcpy(x, "123");
i = atoi(x + 1);
因为x
是指向charx + 1
的指针,是指向下一个char的指针。如果您尝试使用
printf("%s", x + 1);
你会得到23
作为输出。
请注意,您需要将 char 数组的长度声明为比其中的字符数多一 - 以适应结尾\0
。
如果您希望转换第一个数字,然后转换字符串的其余部分,您可以执行以下操作:
char x[] = "123";
int first = x[0]-'0';
int rest = atoi(&x[1]);
printf("Answers are %d and %d\n", first, rest);
结果:
Answers are 1 and 23
atoi()
是的,您可以通过将指针指向要开始转换的第一个字符来转换这样的“后缀”字符串:
const int i = atoi(x + 1);
请注意,这仅适用于后缀,因为它始终会读取到第一个'\0'
终止符。
另请注意,正如问题评论中所指出的,这假设有一个终止符,而您的代码将没有该终止符。
你必须有:
char x[4] = "123";
要不就
char x[] = "123";
或者
const char *x = "123";
让终结者适合。如果您没有终止的数组,则它不是字符串,并且将指向其任何部分的指针传递给atoi()
无效。