Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中字符串内部的八进制表示法_C_Octal_Number Systems - Fatal编程技术网

C语言中字符串内部的八进制表示法

C语言中字符串内部的八进制表示法,c,octal,number-systems,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个或任何其他字符 请解

在给定程序中:

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个或任何其他字符


请解释这背后的逻辑。

这只是语言定义八进制转义序列的方式

八进制转义序列可以是字符常量或字符串文字的一部分,它由一个
\
后跟1、2或3个八进制数字(
'0'
'7'
)组成

“\07777”
中,反斜杠后面是3个八进制数字(0、7、7),表示一个八进制值为
077
或十进制值为
63
的字符。在ASCII或ASCII派生编码中,这恰好是问号
“?”

因此,文本表示长度为3的字符串,由
“?”
,“7”,“7”组成

但你的问题肯定有错。当我运行您的程序时,我得到的输出是:

63 55 55
--?-- --7-- --7--
如果我将
p
的声明更改为

char *p = "\0777";
我得到了你描述的输出。请注意,最后的
---
实际上是两个连字符,后跟一个空字符,后跟两个连字符。如果您使用的是类Unix系统,请尝试通过
cat-v
cat-a
管道传输程序的输出

当您发布代码时,复制并粘贴它是非常重要的,而不是重新键入它

(您缺少顶部的
#include

这里是分配给指向字符的指针的字符串文字

"\07777"
在这个字符串中,使用了文字八进制转义序列,所以前三位数字代表一个八进制数---

在八进制转义序列中只能使用数字0到7八进制转义序列的长度不能超过三位,并且以非八进制数字的第一个字符结尾。虽然不需要全部使用三位数字,但必须至少使用一位。例如,ASCII退格字符的八进制表示为\10,字母A的八进制表示为\101,如ASCII图表中所示

所以字符串文本存储在内存中,如

第1字节为八进制数077,十进制为63,字符为“?”

第2和第3字节分别为字符“7”和“7”

和最后一个终止字符“\0”

所以你们的答案和预期的一样,是字符串文字的第1、第2、第3字节

有关更多说明,请访问此网站


我想你的真实代码有
char*p=“\7777”前面没有0。此链接提供了有关转义序列的更多信息,那么您的问题是什么。如果您清楚地提到,那么您只能得到一个好的回答。更准确地说,八进制数应该在“\000”到“\377”之间,因为它将存储在1字节中,“\377”之后将显示警告:八进制转义序列超出范围。是,八进制转义序列的最大值可以是“\377”,但如果您提供“\378”,则“\37”是您的八进制数,8是字符(如果所有字符都在0到7之间,则最大值为3个字符)。您是否清楚这个概念?
"\07777"