C语言中字符串的strlen()和sizeof()的区别

sizeof()

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

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

strlen()

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

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

sizeof 与 strlen () 对比

  • Sizeof操作符是一元操作符,而strlen()是C语言中的一个预定义函数
  • 支持的数据类型:Sizeof以字节为单位给出任何类型(已分配)数据的实际大小(包括null值),而获取char /string数组的长度。
  • sizeof()是一个编译时表达式,用于表示类型或变量类型的大小。它不关心变量的值。另一方面,Strlen给出了一个以null结尾的c风格字符串的长度。
  • 这两者几乎是不同的概念,用于不同的目的。

在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 <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
—— 完 ——
相关推荐
评论

立 为 非 似

中 谁 昨 此

宵 风 夜 星

。 露 , 辰

文章点击榜

细 无 轻 自

如 边 似 在

愁 丝 梦 飞

。 雨 , 花