- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在努力理解八进制数的 printf 功能。如果我把代码写成:
int main()
{
char *s = "\123";
printf("%s",s);
}
它给我一个 S 的输出,这实际上是正确的,因为 S 的 ASCII 是八进制的 123。但我的问题是,编译器如何识别要从八进制转换的数字序列。例如:
char *s = "\123456"
会给出 S456 的输出
八进制转换最多需要3个数字吗???
八进制是否有最大限制(最大 3 位八进制数为 777)
现在因为最多有 255 个 ascii 字符(八进制 377),所以当我尝试打印 777 时,它打印出一个典型的 �ascii 字符,这可能是因为没有分配给这个数字的 ascii。此功能是否也依赖于编译器/操作系统???
我希望我已经很清楚了,因为这是我在这里的第一个问题 :-)
最佳答案
是的。三位数字是八进制字 rune 字的最大值。来自规范 6.4.4.4 字符常量:
octal-escape-sequence:
\
octal-digit
\
octal-digit octal-digit
\
octal-digit octal-digit octal-digithexadecimal-escape-sequence:
\x
hexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit
如您所述,最大八进制转义序列为 \777
。从上面的规范引用中可以看出,十六进制转义序列没有最大限制。
只有 128 个 ASCII 字符 (0-127)。这意味着您可以使用八进制 \000
到 \177
作为 ASCII。如果您使用不同的字符集,您可能能够在 8 位字符中转到 \377
,并一直到 \777
(或更高,使用wchar_t
的十六进制转义序列)。规范说:
The value of an octal or hexadecimal escape sequence shall be in the range of representable values for the type
unsigned char
for an integer character constant, or the unsigned type corresponding towchar_t
for a wide character constant.
在大多数机器上,unsigned char
是一种 8 位类型,在该上下文中将八进制转义序列限制为 \377
,将十六进制序列限制为 \xff
。在 32 位 wchar_t
上下文的情况下,十六进制序列可能高达 \xffffffff
。
关于c - 通过 printf 命令打印八进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14807036/
我想知道以下语句在 C 中会打印什么? printf("hello\n") || (printf("goodbye\n") || printf("world\n")); 我通常习惯于使用“cout”在
这是我目前正在学习的系统编程类(class)的幻灯片: catch_child 是 SIGCHLD 处理程序。输出与代码如何对应?为什么没有打印一些“Child #x started”消息? 最佳答案
这有点像拼图……我刚刚又回到了C,打算这次掌握它。所以我一直在阅读 The C Programming Language ,我得到了这个声明: Among others, printf also re
如何使用 printf 在字符串末尾附加空格? 我找不到任何在右侧附加空格的示例。 A similar question我发现使用 printf改为在字符串的左侧添加空格。 最佳答案 使用负数左对齐(
我想通过 usart 从 stm32f405 注销。 在我的 syscall.c 文件中,我实现了通过 usart 打印的功能: int _write(int file, char *ptr, int
我想定义一个记录器函数,比如 myPutStrLn = putStrLn . (++) "log: " main = do myPutStrLn "hello" 这很好。现在我想用 printf 格式
Printf module API详细介绍了类型转换标志,其中: %B: convert a boolean argument to the string true or false %b: conv
@H2CO3 这是我的主要代码: #pragma OPENCL EXTENSION cl_ amd_ printf : enable #define PROGRAM_FILE "matvec.cl"
Printf module API详细介绍了类型转换标志,其中: %B: convert a boolean argument to the string true or false %b: conv
您可以使用 printf 字段宽度说明符截断字符串: printf("%.5s", "abcdefgh"); > abcde 不幸的是,它不适用于数字(将 d 替换为 x 是相同的): printf(
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 4 年前。 Improve th
我遇到了我见过的最奇怪的错误之一。 我有一个简单的程序,可以打印多个整数数组。 对数组进行排序,然后打印...... place_in_buf(n100, 100); insertion(10
我的程序是每隔一段时间获取文件大小并显示它以记录任何更改。由于某种原因,执行下面的代码挂起,只为我提供了一个光标。没有打印或显示任何内容。 代码: #include #include #inclu
printf("It is currently %s's turn.\n", current->name); 我想知道为什么在 %s 之后打印出额外的换行符。我知道C 中的字符串总是以\0 结尾。没有
这个问题已经有答案了: printf anomaly after "fork()" (3 个回答) fork() in c using printf [duplicate] (2 个回答) 已关闭 9
我对编程很陌生。 我正在尝试编写一个程序,从数组中调用水果的价格。但我希望代码在写价格之前也写水果的名称。如果我键入 2,如何使输出为“Orange price : 10”而不仅仅是 price :
这个问题在这里已经有了答案: How do I print a non-null-terminated string using printf? (2 个答案) 关闭 7 年前。 例如,我有一个字符
我有一个 atmel UC3-L0 和罗盘传感器。现在我安装 AtmelStudio 并将一些演示代码下载到电路板中。但是我不知道演示代码中的函数 printf 会在哪里出现数据。我应该如何获取数据?
我有一个 atmel UC3-L0 和罗盘传感器。现在我安装 AtmelStudio 并将一些演示代码下载到电路板中。但是我不知道演示代码中的函数 printf 会在哪里出现数据。我应该如何获取数据?
嗨,我是 C 世界的新手,我的代码确实有些奇怪。目标是创建一个函数,可以在开头和结尾处用空格和/或制表符修剪字符串。我无法使用字符串库。 问题是我的代码中有一个 printf 只是用于测试,它的工作非
我是一名优秀的程序员,十分优秀!