string由atoi从一个已定义的索引进行字符转换

假设我有char x[3] = "123"; 我想只转换字符数组的索引1和索引2“ 23 ”,我可以做atoi吗?

我知道我可以做char z[2]; z[0]=x[1]; z[1]=x[2]; atoi(z); 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是指向char的指针,因此x + 1是指向下一个char的指针。 如果您尝试打印

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

你会得到23作为输出。

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

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

 const int i = atoi(x + 1); 

请注意,这只适用于后缀,因为它总是会读取第一个'\0'定界符。

还要注意,正如在问题评论中指出的那样,假定有一个终结者,你的代码将不会有。

你必须有:

 char x[4] = "123"; 

要不就

 char x[] = "123"; 

要么

 const char *x = "123"; 

为了让终结者适应。 如果你没有终止的数组,它不是一个字符串,并且将一个指向它的任何部分的指针传给atoi()是无效的。

如果你想转换第一个数字,那么字符串的其余部分,你可以这样做:

 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