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 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

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

来源:

https://www.srcmini02.com/69433.html

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?