atoi从定义的索引转换为字符串到字符串

时间:2013-07-11 15:20:56

标签: c linux atoi

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

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

3 个答案:

答案 0 :(得分:6)

您可以使用

执行此操作
char x[4];
int i;

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

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

进行打印
printf("%s", x + 1);

你得到23作为输出。

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

答案 1 :(得分: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

答案 2 :(得分:1)

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

const int i = atoi(x + 1);

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

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

你必须:

char x[4] = "123";

或只是

char x[] = "123";

const char *x = "123";

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