首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中字符串中的八进制表示

C中字符串中的八进制表示
EN

Stack Overflow用户
提问于 2012-08-05 08:43:31
回答 2查看 14.3K关注 0票数 4

在给定的程序中:

代码语言:javascript
运行
复制
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-7

我可以理解,它正在将\0 (\077)之后的前两个字符从八进制转换为十进制,但谁能解释为什么是2个字符,为什么不是1或3个字符或其他字符呢?

请解释一下背后的逻辑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-05 11:24:52

代码语言:javascript
运行
复制
char *p = "\07777";

这里,分配给指向字符的指针的字符串文本。

代码语言:javascript
运行
复制
"\07777"

在这个字符串中使用文字八进制转义序列,所以前三个数字表示一个八进制number.because规则,因为八进制转义序列是

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

因此,您的字符串文本存储在内存中,如

1字节作为八进制数077,在小数点和'?‘中只有63。在性格上

第2字节和第3字节分别作为字符'7‘和'7’

最后是一个终止字符\0。

因此,您的答案与预期的字符串文本的第1,2,3字节相同。

要获得更多的解释,您可以访问这个网站。

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

票数 5
EN

Stack Overflow用户

发布于 2012-08-05 09:18:59

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

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

"\07777"中,反斜杠后面跟着三个八进制数字(0,7,7),它表示一个字符,其值为077,以八进制表示,63以小数点表示。在ASCII或ASCII派生的编码中,这恰好是问号'?'.

因此,文字表示一个长度为3的字符串,由'?'、'7‘、'7’组成。

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

代码语言:javascript
运行
复制
63 55 55
--?-- --7-- --7--

如果我将p声明更改为

代码语言:javascript
运行
复制
char *p = "\0777";

我得到了你描述的输出。注意,最后的----实际上是两个连字符,后面是空字符,后面是两个连字符。如果您是在类似Unix的系统上,请尝试通过cat -vcat -A传输程序的输出。

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

(你错过了顶部的#include <stdio.h>。)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11815076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档