c - 为什么 sizeof(msg) 比字符串短?

标签 c pointers

我刚开始学习如何编程,我正在使用这本名为《Head First C》的书。书中有一些章节叫做脑力。在其中一个部分中写了它。

void fortune_cookie(char msg[])
{
  printf("Message reads: %s\n", msg);
  printf("msg occupies %i bytes\n", sizeof(msg));
}

输出:

Cookies make you fat

msg occupies 8 bytes

脑力问题是:为什么您认为 sizeof(msg) 比整个字符串的长度短?什么是 msg?为什么它会在不同的机器上返回不同的尺寸?

最佳答案

在这种特殊情况下

 char msg[]

相同
 char * msg

所以您真正看到的是 sizeof(char *) 的输出。

由于指针的大小取决于架构/编译器,您会在不同的机器上看到不同的输出。

此外,请注意,由于 sizeof 运算符生成类型为 size_t 的结果,因此您应该使用 %zu 格式说明符来打印结果。

关于c - 为什么 sizeof(msg) 比字符串短?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33800842/

相关文章:

c - 为什么我的代码没有给出正确的输出?

c - 通过http链接TP-LINK路由器设置嵌入式设备

c - C 中的字符串切片和复制

c++ - 调用错误没有匹配函数

返回 char 的 C 函数给出冲突类型错误

c - 如何生成 0 和 max 之间的随机 double 值(在 C 中)?

c - 如何在visual studio 2017中每次运行C语言程序时生成一组不同的随机值?

c++ - C 和 C++ 中 new 和 malloc 的行为

C函数指针转换为另一个函数指针

c - 为什么需要在 C 中用 * 定义对指针的引用?