大小()
Sizeof运算符是一个编译时一元运算运算符,可用于计算其操作数的大小。
- sizeof 的结果是无符号整数类型,通常用 size_t 表示。
- sizeof 可以应用于任何数据类型,包括原始类型(例如整数和浮点类型)、指针类型或复合数据类型(例如 Structure、union 等)。
字符串()
strlen() 是 C 中的预定义函数,其定义包含在头文件“字符串.h”中。
- strlen() 接受一个指向数组的指针作为参数,并在运行时从我们给它的地址遍历内存,寻找一个NULL字符,并计算它在找到一个之前通过了多少内存位置。
- strlen() 的主要任务是计算数组或字符串的长度。
sizeof vs strlen()
- 类型: Sizeof运算符是一元运算运算符,而 strlen() 是 C 中的预定义函数
- 支持的数据类型: Sizeof 以字节(包括空值)为单位给出任何类型数据(分配)的实际大小,而获取字符/字符串数组的长度。
- 评估大小: sizeof() 是一个编译时表达式,它为您提供类型或变量类型的大小。它不关心变量的值。
另一方面,Strlen 为您提供 C 风格的以 NULL 结尾的字符串的长度。 - 总结:两者几乎是不同的概念,用于不同的目的。
- 在 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 个字符,包括空字符,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 等的准备工作,请参阅完整的面试准备课程。