sizeof和strlen在c中的差异

sizeof和strlen在c中的差异,c,C,可能重复: 有谁能帮助我理解c编程中的sizeof方法和strlen方法之间的区别吗?sizeof不是一种方法。它是一个编译时构造,用于确定特定类型或变量占用的内存量strlen是一个函数,它计算从内存中指定位置开始的连续非零char值的数量(这恰好与确定以零结尾的C字符串的长度相同)。strlen()用于获取存储在数组中的字符串的长度 sizeof()用于获取任何类型数据的实际大小(以字节为单位) 此外,sizeof()是一个编译时表达式,提供类型或变量类型的大小。它不关心变量的值 strl

可能重复:


有谁能帮助我理解c编程中的sizeof方法和strlen方法之间的区别吗?

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

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

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

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

strlen()是一个函数,它获取指向字符的指针,并从此字符开始遍历内存,查找空字符。它在找到空字符之前统计字符数。换句话说,它为您提供了一个C样式的以null结尾的字符串的长度


这两者是完全不同的。在C++中,C样式字符串不需要非常多,STRUNLY(),它应该被C++风格>代码:STD::Stase取代,而C++中的 siZeFor()/Cuff>的主要应用程序是对函数如<代码> MalCube()/<代码>、<代码> MycPy](<代码> >或<代码> MeMSET()>代码>,所有这些都不应该在C++中使用。(使用新的、
std::copy()
std::fill()
构造函数
).

+1,但即使使用
std::copy
std::fill
如果使用C样式数组,也必须提供数组的元素数。重点不是
memcpy
/
memset
与STL算法,而是C-array/strings与
std::vector
/
std::array
/
std::string
/其他容器。“sizeof是一个编译时表达式”-除了在C99中的VLA上使用时。只是一个nit,但是…有一个
NULL
指针和一个“NULL指针”,但它是一个nul字符(或者我更喜欢的是:一个
'\0'
字符)。@James:对
0
说“NULL字符”和“钟形字符”或“钟形字符”表示
7
,或“换行符”、“水平)制表符”等。我也更喜欢“nul”只是为了帮助区分类型和上下文,并且使用ASCII字符的ASCII背书名称提供了一种一致性。但我们不要假装这不是“null”的三个字母的缩写@SteveJessop它还有更多的含义:它是原始ASCII标准中字符的官方名称(似乎对三个字母的名称有明确的偏好)在C++上下文中,我更喜欢<代码> 0”/CODE,因为这是你用代码编写的方式。你也可以写“代码> 0”/Cube >,但是不清楚你在处理一个字符。C++标准称它为“空字符类型值CART())。“但是在C++中,<代码> null <代码>是一个宏,由标准定义,所以我会避免(除非你指的是宏)。