1. 主页
  2. 文档
  3. C语言教程
  4. C语言运算符
  5. C中字符串的strlen()和sizeof()之间的区别

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

sizeof()

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

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

strlen()

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

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

    sizeof 与 strlen()

    1. 类型: Sizeof 运算符是一元运算符,而 strlen() 是 C 中的预定义函数
    2. 支持的数据类型: Sizeof 以字节(包括空值)为单位给出任何类型数据(已分配)的实际大小,而获取字符/字符串数组的长度。
    3. 评估大小: sizeof() 是一个编译时表达式,为您提供类型或变量类型的大小。它不关心变量的值。
      另一方面,Strlen 为您提供 C 风格的以 NULL 结尾的字符串的长度。
    4. 总结:两者几乎是不同的概念,用于不同的目的。
    5. 在 C++ 的上下文中:在 C++ 中,您不需要它们中的任何一个。C 风格字符串中的
      strlen()可以替换为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 8
Size 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) = 10 
strlen(a) = 9 
sizeof(b) = 9 
strlen(b) = 11

 

这篇文章对您有用吗?