假设我有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