【问题标题】:Why it is showing different size?为什么它显示不同的大小?
【发布时间】:2021-08-24 13:48:28
【问题描述】:

为什么这个语句显示 2 个字节,而字符串中只有一个字符

printf("%d = Bytes", sizeof("a")); 

为什么这个语句显示 4 个字节,而一个字符中只有一个字符。

printf("%d = Bytes", sizeof('a')); 

【问题讨论】:

  • 在 C 中,所有文字字符串(带有双引号 " 的字符串)实际上都是不可修改的数组,其中的字符加上字符串空终止符.
  • 顺便说一下,sizeof 运算符返回一个size_t 类型的值,您确实需要使用%zu 格式来打印。格式说明符和参数类型不匹配会导致未定义的行为
  • 补充 @Someprogrammerdude 类型不匹配 - 编译器警告是有原因的......
  • 'a' 的类型是 int,它的大小似乎是 4 个字节。
  • 顺便说一句,像sizeof('abcde') 这样很少使用的宽字符常量也是4。

标签: c charts types integer sizeof


【解决方案1】:

字符串字面量,this: "a" 相当于 C 中的字符数组。如果在它们上使用 sizeof,则可以得到数组的大小。 a 和空终止符 \0 是 2 个字节,所以你得到 2。不要与 strlen("a") 混淆,它会给出 1。

'a' 是一个字符常量。奇怪的是,由于历史原因,这些都是 C 语言中的 int 类型。 not char 这是有道理的。这是一种 C 语言缺陷。在 C++ 中,他们解决了这个问题,并且字符文字的大小为 1。但在 C 中,sizeof('a') 将始终等于 sizeof(int)。在您的系统上,这显然是 4 个字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    相关资源
    最近更新 更多