在给定的程序中:
int main() {
char *p = "\0777";
printf("%d %d %d\n",p[0],p[1],p[2]);
printf("--%c-- --%c-- --%c--\n",p[0],p[1],p[2]);
return 0;
}
它显示输出为:
63 55 0
--?-- --7-- ----
我可以理解它正在将 \0 (\077) 之后的前两个字符从八进制转换为十进制 但是谁能解释一下为什么是 2 个字符,为什么不是 1 或 3 或任何其他?
请解释这背后的逻辑。
最佳答案
char *p = "\07777";
此处将字符串文字分配给指向字符的指针。
"\07777"
在这个字符串中使用了八进制转义序列,所以前三位数字代表一个八进制数。因为八进制转义序列的规则是---
在八进制转义序列中只能使用数字 0 到 7。 八进制转义序列的长度永远不能超过三位数字,并以第一个非八进制数字的字符结束。虽然您不需要使用所有三位数字,但您必须至少使用一个。例如,ASCII 退格字符的八进制表示为\10,字母 A 的八进制表示为\101,如 ASCII 图表中所示。
所以你的字符串文字存储在内存中就像
第一个字节是八进制数 077,它只是十进制的 63 和 '?'在性格中
第二个和第三个字节分别为字符'7'和'7'
最后是一个终止符'\0'。
因此您的答案与字符串文字的第 1、2、3 字节一样。
更多的解释你可以访问这个网站
关于c - C中字符串中的八进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815076/