假设我有char x[3] = "123";
并且我想仅转换char数组的索引1和index2“23
”,我可以通过atoi
进行转换吗?
我知道我可以char z[2]; z[0]=x[1]; z[1]=x[2]; atoi(z);
来做,但这不是我要求的。
答案 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()
无效。