[英]string to char conversion by atoi from a defined index
假设我有char x[3] = "123";
我想只转换char数组的索引1和index2“ 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 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
。
如果您希望转换第一个数字,然后转换字符串的剩余部分,您可以执行以下操作:
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
是的,您可以通过给atoi()
指向要转换开始的第一个字符的指针来转换这样的“后缀”字符串:
const int i = atoi(x + 1);
请注意,这仅适用于后缀,因为它将始终读取第一个'\\0'
终结器字符。
另外请注意,在一个问题的评论中指出,这一假设有一个终结者,你的代码将不会有。
你必须有:
char x[4] = "123";
要不就
char x[] = "123";
要么
const char *x = "123";
让终结器适合。 如果你没有终止数组,它不是一个字符串,并且将指向它的任何部分的指针传递给atoi()
是无效的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.