📜  C++ 中的 sizeof() vs strlen() vs size()

📅  最后修改于: 2022-05-13 01:54:51.580000             🧑  作者: Mango

C++ 中的 sizeof() vs strlen() vs size()

字符串是字符序列或字符数组。使用字符数组的字符串的声明和定义类似于任何其他数据类型的数组的声明和定义。本文重点讨论三个字符串函数:

  1. 大小()
  2. strlen()
  3. 尺寸()

使用这三个函数计算字符串的大小取决于代码中的声明类型。让我们详细讨论这些功能。

大小()

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

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

句法:

strlen()

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

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

句法:

尺寸()

size()函数用于以字节为单位返回字符串的长度。它定义了符合 String 对象内容的实际字节数。

句法:

sizeof() vs strlen() vs size()

三个函数之间有以下几点不同:

  1. 类型: sizeof运算符是一元运算运算符,strlen() 是 C 中的预定义函数,而 size() 是字符串类的成员函数。
  2. 支持的数据类型: sizeof() 以字节(包括空值)为单位给出任何类型数据(已分配)的实际大小,strlen() 用于获取字符/字符串数组的长度,而 size() 返回字符串中的字符数。
  3. 评估大小: sizeof() 是一个编译时表达式,它给出类型或变量类型的大小。它不关心变量的值。另一方面,strlen() 给出了 C 风格的以 NULL 结尾的字符串的长度,而 size() 也返回了指定字符串的长度。
  4. 返回值的差异:如果将相同的值作为输入传递给 sizeof()、strlen() 和 size(),则 sizeof() 将给出比字符串长度高一个值。
S No.sizeof()strlen()size()
1. Compile-time unary operator.The predefined function of the char array.A member function of string.
2.Return the actual size of any type of data (allocated) in bytes.It looks for a NULL character and returns a number of elements present in the string before the NULL character.Return length of the string in bytes.
3.Used in case of char array where the elements are separated by a comma.Used in case of char array where the elements are not separated by a comma.Used in case of a string.
4.Example:
char arr[] = {‘G’,’e’,’e’,’k’}
Example:
char arr[] = “Geek”
Example:
string str = “Geek”

下面是实现上述概念的 C++ 程序:

C++
// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    char str1[] = { 'G', 'e', 'e', 'k' };
    char str2[] = "Geek";
    string str3 = "Geek";
 
    // Finding the length of the
    // string using different methods
    // This method works fine
    cout << "The length of str1 using sizeof(): "
         << sizeof(str1) << "\n";
 
    // This method behaves abnormally
    cout << "The length of str1 using strlen(): "
         << strlen(str1) << "\n"
         << endl;
 
    // Gives length of string + 1
 
    cout << "The length of str2 using sizeof(): "
         << sizeof(str2) << "\n";
 
    // This method Works fine
    cout << "The length of str2 using strlen(): "
         << strlen(str2) << "\n"
         << endl;
 
    // This method always gives 32
    cout << "The length of str3 using sizeof(): "
         << sizeof(str3) << "\n";
 
    // This method works fine
    cout << "The length of str3 using size(): "
         << str3.size() << "\n"
         << endl;
}



输出
The length of str1 using sizeof(): 4
The length of str1 using strlen(): 6

The length of str2 using sizeof(): 5
The length of str2 using strlen(): 4

The length of str3 using sizeof(): 32
The length of str3 using size(): 4