字符串中的 %a 读取为内存中的一个点
`% a` in string reads as a point in memory
我在演示表达式行为的小程序中使用以下代码:
c = a % b;
d = b % a;
printf("\nc = a % b\n"
"d = b % a\n"
" a = %d\n"
" b = %d\n"
" c = %d\n"
" d = %d\n\n",
a, b, c, d);
输出如下:
c = a % b
d = b 0x0.0000000000008p-1022
a = 5
b = 7
c = 5
d = 2
我已经尝试转义字符串中的模运算符而不改变输出:
c = a % b;
d = b % a;
printf("\nc = a \% b\n"
"d = b \% a\n"
" a = %d\n"
" b = %d\n"
" c = %d\n"
" d = %d\n\n",
a, b, c, d);
我想知道的是:当 % b
按预期输出字符串时,为什么 % a
似乎指向内存中的某个位置?此外,为什么转义模数符号不能解决问题?
编辑(已解决):
感谢大家的评论和回答;我能够从您的回复中找到完整的详细信息。
此问题与以下问题重复,可参考以获取更多信息:
- Why is percentage character not escaped with backslash in C?
- How to escape the % (percent) sign in C's printf
白色 space 在 %
之后被忽略,printf 将使用下一个非白色 space 字符来标识转换说明符。这没有影响 "c = a % b"
的原因是因为 %b
不是有效的转换说明符。
之所以必须使用%%
转义%
符号是因为%
这里的用法是printf特有的,必须遵循printf的转义规则,不同来自继承自 C.
的 \
的转义规则
要转义格式字符串中的符号“%”,您需要像这样将其加倍
printf("\nc = a %% b\n"
我在演示表达式行为的小程序中使用以下代码:
c = a % b;
d = b % a;
printf("\nc = a % b\n"
"d = b % a\n"
" a = %d\n"
" b = %d\n"
" c = %d\n"
" d = %d\n\n",
a, b, c, d);
输出如下:
c = a % b
d = b 0x0.0000000000008p-1022
a = 5
b = 7
c = 5
d = 2
我已经尝试转义字符串中的模运算符而不改变输出:
c = a % b;
d = b % a;
printf("\nc = a \% b\n"
"d = b \% a\n"
" a = %d\n"
" b = %d\n"
" c = %d\n"
" d = %d\n\n",
a, b, c, d);
我想知道的是:当 % b
按预期输出字符串时,为什么 % a
似乎指向内存中的某个位置?此外,为什么转义模数符号不能解决问题?
编辑(已解决):
感谢大家的评论和回答;我能够从您的回复中找到完整的详细信息。
此问题与以下问题重复,可参考以获取更多信息:
- Why is percentage character not escaped with backslash in C?
- How to escape the % (percent) sign in C's printf
白色 space 在 %
之后被忽略,printf 将使用下一个非白色 space 字符来标识转换说明符。这没有影响 "c = a % b"
的原因是因为 %b
不是有效的转换说明符。
之所以必须使用%%
转义%
符号是因为%
这里的用法是printf特有的,必须遵循printf的转义规则,不同来自继承自 C.
\
的转义规则
要转义格式字符串中的符号“%”,您需要像这样将其加倍
printf("\nc = a %% b\n"