C中字符串的strlen()和sizeof()之间的区别

sizeof()
Sizeof运算符是一个编译时一元运算符, 可用于计算其操作数的大小。

  • sizeof的结果是无符号整数类型, 通常用size_t表示。
  • sizeof可以应用于任何数据类型, 包括原始类型(例如整数和浮点类型, 指针类型)或复合数据类型(例如Structure, union等)。
strlen()
strlen()是C语言中的预定义函数, 其定义包含在头文件” string.h” 中。
strlen()接受一个指向数组的指针作为参数, 并在运行时从我们给它的地址遍历内存, 以寻找一个NULL字符, 并在找到一个字符之前计算它经过了多少个内存位置。
strlen()的主要任务是计算数组或字符串的长度。
sizeof vs strlen()
  1. 类型如下:Sizeof运算符是一元运算符, 而strlen()是C中的预定义函数
  2. 支持的数据类型:Sizeof给出任何类型的数据(分配的)实际大小, 以字节为单位(包括空值), 而获得字符/字符串数组的长度。
  3. 评估大小:sizeof()是一个编译时表达式, 可为你提供类型或变量类型的大小。它不在乎变量的值。
    另一方面, Strlen为你提供C样式的NULL终止字符串的长度。
  4. 概要:两者几乎是不同的概念, 并且用于不同的目的。
  5. 在C ++中:在C ++中, 你不需要任何此类的东西。
    strlen()C风格的字符串可以替换为C ++ std :: strings.
    C中的sizeof()用作malloc(), memcpy()或memset()之类的函数的参数, 可以替换为C ++(使用new, std :: copy()和std :: fill()或构造函数).
//C program to demonstrate difference //between strlen() and sizeof() #include< stdio.h> #include< string.h> int main() { char str[] = "November" ; printf ( "Length of String is %lu\n" , strlen (str)); printf ( "Size of String is %lu\n" , sizeof (str)); }

输出如下:
Length of String is 8Size of String is 9

由于C语言中char的大小为1个字节, 因此我们还发现strlen()的值比sizeof()小。
说明:
我们知道, 每个字符串都以NULL字符(” \ 0″ )结尾。
strlen()
搜索该NULL字符并计算传递的内存地址数, 因此它实际上计算NULL字符之前的字符串中存在的元素数, 此处为8。
sizeof()
运算符返回为传递给它的操作数分配的实际内存量。这里的操作数是一个字符数组, 其中包含9个字符(包括Null字符), 并且1个字符的大小为1个字节。因此, 这里的总大小为9个字节。
尝试猜测以下程序的输出:
#include < iostream> #include < string.h> using namespace std; int main() { char a[] = { "Geeks for" }; char b[] = { 'G' , 'e' , 'e' , 'k' , 's' , ' ' , 'f' , 'o' , 'r' }; cout < < "sizeof(a) = " < < sizeof (a); cout < < "\nstrlen(a) = " < < strlen (a); cout< < "\nsizeof(b) = " < < sizeof (b); cout< < "\nstrlen(b) = " < < strlen (b); return 0; }

strlen函数会查找空字符, 如果找不到该字符, 则会表现异常。
输出如下:
sizeof(a) = 10strlen(a) = 9sizeof(b) = 9strlen(b) = 11

【C中字符串的strlen()和sizeof()之间的区别】如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

    推荐阅读