char 数组的 SizeOf 函数的工作原理
void main()
{
char s[]="\12345s\n";
printf("%d",sizeof(s));
}
当我编译它时,它给出 6。我不明白为什么它给出 6 而不是 8。 就像 {'\1','2','3','4','5','s','\n'}
请有人告诉我这样做的原因,我想一些深刻而清晰的解释。我会感谢他们。
void main()
{
char s[]="\12345s\n";
printf("%d",sizeof(s));
}
When i compile it it giving 6. I am not geting why it is giving 6 insted of 8.
Like {'\1','2','3','4','5','s','\n'}
Please can anybody tell the reason for this, I want some deep and clear explanation. I will be thankful to them.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
由于
\123
被视为一个字符,因此它是一个转义序列(八进制)。因此sizeof
计算 5 个字符'\123'
,'4'
,'5'
,' s'
、'\n'
和结尾'\0'
。Because
\123
is considered one character, it's an escape sequence (octal). Sosizeof
calculates 5 characters'\123'
,'4'
,'5'
,'s'
,'\n'
, and the ending'\0'
.\
表示转义序列如果数字最多使用 3 位,则默认为八进制。
所以 \123 将以八进制计算为
-> 8*8*1 + 8*2 + 3 = 83
所以如果你打印这个你会发现它
S45s
作为S->相当于 83 的 Ascii
因此大小也是 4。
\
indicates escape sequenceIt is octal by default if numbers are used upto 3 places.
So \123 will be evaluated in octal as
-> 8*8*1 + 8*2 + 3 = 83
So if you print this you would find it
S45s
As S -> Ascii equivalent of 83
Hence the size is also 4.
等于:
所以总共有六个元素。
is equal to:
so six elements in total.