c - C中字符串中的八进制表示

标签 c octal number-systems

在给定的程序中:

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 字节一样。

更多的解释你可以访问这个网站

http://msdn.microsoft.com/en-us/library/edsza5ck.aspx

关于c - C中字符串中的八进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815076/

相关文章:

Python:如何转换随着数字计数增加而用逗号分隔的数字?

C++ 找出所有基数,使得这些基数中的 P 以 Q 的十进制表示结尾

c - roll() 函数导致的未定义行为(使用 C)

ruby - 如何避免八进制、二进制等数字在字符串转换期间改变输出

java - 为什么 Java 八进制转义最多只能达到 255?

Git:如何在命令行上指定包含八进制符号的文件名

c++ - 如何解决出现在 Objective-C++ 而不是 Objective-C 中的链接错误?

c++ - 如何在更大的存储上重新分配内容,但其余内容为零?

c++ - 为什么 C 和 C++ 中有二合字母?

python - int(x[,base]) 是如何工作的?