c - C 编程中的 sizeof() 行为

标签 c sizeof implicit-conversion string-literals

这是我的程序..

int main(void) {

    printf("%lu\n", sizeof(""));

    // first if else statement
    if(1 > -2) printf("Yes");
    else printf("No");

    printf("\n");

    // second if else statement    
    if( sizeof("") > -2) printf("Yes");
    else printf("No");
}

首先 printf() 为什么它打印 1 作为输出,尽管我传递了一个空字符串?
在第一个 if-else 语句中,我得到了正确的输出 -> 是预期的,但是在第二个 if-else 语句中它打印输出 -> 不,谁能解释一下为什么会发生这种情况?

我的输出是..
1
是的


提前致谢 :-)

最佳答案

C 中的所有字符串都以 \0 空字符结尾。这表示刺结束。

当用 C 编程时,可视化数据实际上如何存储在内存中总是很好的,正如你在这里看到的,“Hello”有 5 个字符长,但是必须给 char 数组提供 6 个字符,以便为这个空字符留出空间。

Sting memory representaion in C

以下是 Bob Jarvis 建议的示例:

enter image description here

至于 sizeof("") > -2 是假的,看看 sepp2k 的回答

关于c - C 编程中的 sizeof() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61561870/

相关文章:

volatile 变量的更改仅在单步执行代码或关闭优化时发生

c++ - 为什么结构的 sizeof 不等于每个成员的 sizeof 之和?

c++ - 为什么在 64 位机器上的 C++ 中 int 的大小不是 8 个字节。还有 gcc 的任何版本都支持 8 字节 int 吗?

generics - 为什么 `From` 不自动用于强制实现 trait 类型

typescript - 为什么在 TypeScript 中接口(interface)中可能的数字值可以转换为类实现中不可能的数字值?

scala - 如何区分编译器推断的隐式转换和显式调用的隐式转换?

c - libnfc : unable to open NFC device

c - 在 Xcode 中,链接器命令失败,退出代码为 1

c++ - 使用 sizeof 计算数组中元素数时的不同结果

c - 新手 asm : where is the call code?