sizeof()
Sizeof运算符是一个编译时一元运算符, 可用于计算其操作数的大小。
- sizeof的结果是无符号整数类型, 通常用size_t表示。
- sizeof可以应用于任何数据类型, 包括原始类型(例如整数和浮点类型, 指针类型)或复合数据类型(例如Structure, union等)。
strlen()
strlen()是C语言中的预定义函数, 其定义包含在头文件” string.h”中。
strlen()接受一个指向数组的指针作为参数, 并在运行时从我们给它的地址遍历内存, 以寻找一个NULL字符, 并在找到一个字符之前计算它经过了多少个内存位置。
strlen()的主要任务是计算数组或字符串的长度。
sizeof vs strlen()
- 类型如下:Sizeof运算符是一元运算符, 而strlen()是C中的预定义函数
- 支持的数据类型:Sizeof给出任何类型的数据(分配的)实际大小, 以字节为单位(包括空值), 而获得字符/字符串数组的长度。
- 评估大小:sizeof()是一个编译时表达式, 可为你提供类型或变量类型的大小。它不在乎变量的值。
另一方面, Strlen为你提供C样式的NULL终止字符串的长度。 - 概要:两者几乎是不同的概念, 并且用于不同的目的。
- 在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
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
评论前必须登录!
注册