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

📅  最后修改于: 2021-05-25 21:44:15             🧑  作者: Mango

sizeof()

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

  • sizeof的结果是无符号整数类型,通常用size_t表示。
  • sizeof可以应用于任何数据类型,包括基本类型(例如整数和浮点类型,指针类型)或复合数据类型(例如Structure,union等)。

strlen()

strlen()是C语言中的预定义函数,其定义包含在头文件“字符串.h”中。

  • strlen()接受一个指向数组的指针作为参数,并在运行时从我们给它的地址遍历内存,以寻找一个NULL字符,并在找到一个字符计算它经过了多少个内存位置。
  • strlen()的主要任务是计算数组或字符串的长度。

    sizeof vs strlen()

    1. 类型: Sizeof运算符是一元运算运算符,而strlen()是C中的预定义函数
    2. 支持的数据类型: Sizeof给出任何类型(分配的)数据的实际大小(以字节为单位)(包括null值),而获得chars / 字符串数组的长度。
    3. 评估大小: sizeof()是一个编译时表达式,为您提供类型或变量类型的大小。它不在乎变量的值。
      另一方面,Strlen为您提供C样式的以NULL终止的字符串的长度。
    4. 简介:两者几乎是不同的概念,并且用于不同的目的。
    5. 在C++上下文中:在C++中,您不需要它们中的任何一个。
      C样式字符串的strlen()可以用C++ std :: 字符串代替。
      C语言中的sizeof()作为malloc(),memcpy()或memset()之类的函数的参数,可以用C++替换(使用new,std :: copy()和std :: fill()或构造函数)
    // C program to demonstrate difference 
    // between strlen() and sizeof()
    #include
    #include
      
    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 8
    Size of String is 9
    

    由于C语言中char的大小为1个字节,因此我们还发现strlen()的值比sizeof()小。

    说明:我们知道,每个字符串以NULL字符(“ \ 0”)结尾。
    strlen()搜索该NULL字符并计算传递的内存地址数,因此实际上它计算NULL字符之前的字符串存在的元素数,此处为8。
    sizeof()运算符返回为传递给它的操作数分配的实际内存量。这里的操作数是一个字符数组,其中包含9个字符(包括Null字符),并且1个字符的大小为1个字节。因此,这里的总大小为9个字节。
    尝试猜测以下程序的输出:

    #include 
    #include 
    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) = 10
    strlen(a) = 9
    sizeof(b) = 9
    strlen(b) = 11
    
    要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”