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++中的
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 <代码>是一个宏,由标准定义,所以我会避免(除非你指的是宏)。