差异
可能重复:
Different answers from strlen and sizeof for Pointer & Array based init of String差异
任何人可以帮助我在的sizeof方法和C编程的strlen方法之间的理解不同?
strlen()
用于获取字符/字符串数组的长度。
sizeof()
用于获取以字节为单位的任何类型数据的实际大小。
此外,sizeof()
是一个编译时表达式,它提供了一个类型或变量类型的大小。它不关心变量的值。
strlen()是一个函数,它接受一个指向一个字符的指针,并从这个字符开始遍历内存,寻找一个NULL字符。它计算找到NULL字符之前的字符数。换句话说,它给你一个C样式的以NULL结尾的字符串的长度。
两者几乎不同。在C++中,你不需要任何非常多,strlen的()是C风格的字符串,这应该由C++所取代 - 风格std::strings
,而对于sizeof()
C中的主要应用是作为参数传递的功能,如malloc()
,memcpy()
或memset()
,所有这些都不应在C++中使用(使用新的,std::copy()
和std::fill()
或constructors
)。
1,但即使使用'的std :: copy'和'的std :: fill'你有如果使用的是C风格阵列,以提供阵列的元件的数量。与STL算法不同的是,memcpy/memset不是很多,但C数组/字符串vs std :: vector/std :: array/std :: string /其他容器。 – 2011-12-21 13:16:35
“sizeof是编译时表达式” - 除非在C99中使用VLA。 – 2011-12-21 13:21:07
只是一个nit,但是......有一个NULL指针和一个“空指针”,但它是一个nul字符(或者我喜欢的:一个'\ 0'字符)。 – 2011-12-21 13:32:33
sizeof
不是方法。它是一个编译时构造,用于确定特定类型或变量占用的内存量。另一方面,函数计数从内存中的指定位置开始的连续的非零char
值的数量(恰好与确定零终止的C串的长度相同)。
为什么标记为C++? – 2011-12-21 14:10:15
我删除标签 – Prabhu 2011-12-22 12:20:12