【问题标题】:Why does sizeof return different values for same string in C? [duplicate]为什么 sizeof 在 C 中为相同的字符串返回不同的值? [复制]
【发布时间】:2012-03-10 05:49:35
【问题描述】:

可能重复:
Sizeof doesn't return the true size of variable in C
C -> sizeof string is always 8

Sizeof 打印出 6 个:

printf("%d\n", sizeof("abcde"));

但它打印出 4 用于:

char* str = "abcde";
printf("%d\n", sizeof(str));

谁能解释一下原因?

【问题讨论】:

    标签: c string unix sizeof


    【解决方案1】:

    字符串文字"abcde" 是一个字符数组。它有 6 个字节长,包括空终止符。

    char* 类型的变量是一个指向字符的指针。它的大小是指针的大小,在 32 位系统上是 4 个字节。 sizeof 是一个编译时操作,所以它只查看变量的静态类型,在本例中为char*。它不知道指向什么。

    † 除可变长度数组外,C99 语言标准中引入的一项功能

    【讨论】:

      【解决方案2】:

      第一个例子,sizeof() 返回纯字符串的长度
      第二个例子,sizeof() 返回 指针大小 -> 32bits so 4 bytes。

      【讨论】:

        【解决方案3】:

        因为这里

        printf("%d\n", sizeof("abcde"));
        

        是一个字符串,考虑 NULL 它的 6 字节长。

        char* str = "abcde";
        printf("%d\n", sizeof(str));
        

        是一个需要 32 位的指针,因此需要 4 个字节:-)

        【讨论】:

          猜你喜欢
          • 2012-05-29
          • 1970-01-01
          • 2015-07-07
          • 1970-01-01
          • 2014-11-30
          • 1970-01-01
          • 2012-07-20
          • 1970-01-01
          • 2021-12-17
          相关资源
          最近更新 更多