差异

2011-12-21 84 views

回答

21

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

1,但即使使用'的std :: copy'和'的std :: fill'你有如果使用的是C风格阵列,以提供阵列的元件的数量。与STL算法不同的是,memcpy/memset不是很多,但C数组/字符串vs std :: vector/std :: array/std :: string /其他容器。 – 2011-12-21 13:16:35

+2

“sizeof是编译时表达式” - 除非在C99中使用VLA。 – 2011-12-21 13:21:07

+1

只是一个nit,但是......有一个NULL指针和一个“空指针”,但它是一个nul字符(或者我喜欢的:一个'\ 0'字符)。 – 2011-12-21 13:32:33

9

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