3

假设我有char x[3] = "123";并且我想只转换23char 数组的索引 1 和 index2 "",我可以通过atoi吗?

我知道我可以做到,char z[2]; z[0]=x[1]; z[1]=x[2]; atoi(z);但这不是我所要求的。

4

3 回答 3

6

你可以这样做

char x[4];
int i;

strcpy(x, "123");
i = atoi(x + 1);

因为x是指向charx + 1的指针,是指向下一个char的指针。如果您尝试使用

printf("%s", x + 1);

你会得到23作为输出。

请注意,您需要将 char 数组的长度声明为比其中的字符数多一 - 以适应结尾\0

于 2013-07-11T15:22:35.333 回答
2

如果您希望转换第一个数字,然后转换字符串的其余部分,您可以执行以下操作:

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
于 2013-07-11T15:24:29.530 回答
1

atoi()是的,您可以通过将指针指向要开始转换的第一个字符来转换这样的“后缀”字符串:

const int i = atoi(x + 1);

请注意,这仅适用于后缀,因为它始终会读取到第一个'\0'终止符。

另请注意,正如问题评论中所指出的,这假设有一个终止符,而您的代码将没有该终止符。

你必须有:

char x[4] = "123";

要不就

char x[] = "123";

或者

const char *x = "123";

让终结者适合。如果您没有终止的数组,则它不是字符串,并且将指向其任何部分的指针传递给atoi()无效。

于 2013-07-11T15:22:16.373 回答