【问题标题】:difference between sizeof and strlen in c [duplicate]c中sizeof和strlen之间的区别[重复]
【发布时间】:2011-12-21 13:11:39
【问题描述】:

可能重复:
Different answers from strlen and sizeof for Pointer & Array based init of String

谁能帮我理解c编程中sizeof方法和strlen方法的区别?

【问题讨论】:

    标签: c


    【解决方案1】:

    strlen() 用于获取存储在数组中的字符串的长度。

    sizeof() 用于获取任何类型数据的实际大小(以字节为单位)。

    此外,sizeof() 是一个编译时表达式,可为您提供类型的大小或变量的类型。它不关心变量的值。

    strlen() 是一个函数,它接受一个字符的指针,并从这个字符开始遍历内存,寻找一个空字符。它在找到空字符之前计算字符数。换句话说,它为您提供了 C 风格的以空字符结尾的字符串的长度。

    两者完全不同。在 C++ 中,你不需要太多,strlen() 用于 C 风格的字符串,应该用 C++ 风格的std::strings 替换,而 sizeof() 在 C 中的主要应用是作为函数的参数,如malloc()memcpy()memset(),所有这些都不应在 C++ 中使用(使用新的、std::copy()std::fill()constructors)。

    【讨论】:

    • +1,但即使使用 std::copystd::fill 如果您使用 C 样式数组,您也必须提供数组元素的数量。重点不是memcpy/memset vs STL算法,而是C-arrays/strings vs std::vector/std::array/std::string/其他容器。
    • "sizeof 是一个编译时表达式" - 除非在 C99 中的 VLA 上使用。
    • 只是个笨蛋,但是...有一个NULL 指针和一个“空指针”,但它是一个空字符(或者我更喜欢:'\0' 字符)。
    • @James:为0 说“空字符”或“空字符”与为7 说“铃铛字符”或“铃铛字符”或“换行”一样有效, "(horizo​​ntal) tab" 等。我也更喜欢 "nul" 只是为了帮助区分类型和上下文,并且使用 ASCII 字符的 ASCII 认可名称提供了一种一致性。但是,我们不要假装这只是“null”的三个字母缩写:-)
    • @SteveJessop 还有更多:它是原始 ASCII 标准中字符的官方名称(似乎对三个字母名称有明确的偏好)。在 C++ 上下文中,我更喜欢'\0',因为这是您在代码中编写它的方式。你也可以只写0,但不清楚你是在处理一个角色。 C++ 标准确实将其称为“空字符类型值 charT()”。但在 C++ 中,NULL 是一个宏,由标准定义,所以我会避免这种情况(除非你指的是宏)。
    【解决方案2】:

    sizeof 不是一个方法。它是一种编译时构造,用于确定特定类型或变量占用的内存量。另一方面,strlen 是一个函数,它计算从内存中指定位置开始的连续非零 char 值的数量(恰好与确定长度相同)以零结尾的 C 字符串)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 2015-02-23
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      相关资源
      最近更新 更多