首页 > 编程知识 正文

strlength函数,sizeof和strlen的长度

时间:2023-05-05 09:56:12 阅读:108527 作者:4552

strlen和sizeof

以前从某种意义上混淆了两种东西,但对它们的功能不是很了解。

如果你看看谷歌,就会发现自己经常误解。

strlen和sizeof的区别

1.sizeof操作符的结果类型为size_t,头文件中的typedef为unsigned int类型。

此类型保证可以容纳实现已建立的最大对象的字节大小。

2.sizeof是运算符,strlen是函数。

3.sizeof可以在类型中创建参数,strlen只能在char*中创建参数,并且必须以“' '”结尾。

4 .数组创建sizeof的参数不退化,传递给strlen时退化为指针。

5 .大多数编译器在编译时计算了sizeof是类型还是变量的长度。 这就是sizeof(x )可以定义数组维的理由

char str[20]='0123456789 '; //str是编译时大小固定的数组

inta=strlen(str; //a=10; //strlen ()在执行中确定

intb=sizeof(str ); //且b=20; //sizeof ) )在编译期确定

6.strlen的结果在运行时计算,用于计算字符串的实际长度,类型并不占用内存大小。

7 .如果是类型,必须在7.sizeof之后加上括号,但如果是变量名,也可以不加括号。 这是因为sizeof是操作符,不是函数。

char c;

sizeof c; //变量名可以不加括号

如果sizeof应用于某个结构类型或变量,则返回实际大小。

如果应用了静态空间数组,则sizeof返回所有数组的大小。

sizeof操作符不能返回动态分配的数组或外部数组的大小

笔者领悟:

我的误解是sizeof和strlen都是返回字符串的长度,但其实其中真的有很多幼稚的地方,我想很多程序员一开始也很困惑。

char * test=“daoluan "

sizeof的结果是4,明显是类型的大小; 然后,strlen的调用结果是6,这里strlen聪明多了。

char test[10]=“daoluan”;

sizeof的结果为10 (在编译过程中准备),strlen的结果为6。 在这里strlen也很聪明。

这样的结果很明显。

2011-12-10补充:

声明字符数组。 例如,当char str[9]一起赋值时,有些人会说。

char str[9]='abcdefghi '; //9个字,没错啊

很遗憾,编译器不允许。 在字符数组中,数组的最后一个值必须为(即空格)。 因此,上述句子是错误的。

应该改为:

char str[9]='abcdefgh '

ZeroMemory和memset

两者的功能相同,将内存的一部分内容设为0。 当然,前者必须是memset(valiable,0,sizeof ) ) ) ) )。

所以比较起来,还是memset的功能有点强大,还是不用放0。

memset(valiable,1,sizeof ) valiable )。

memset函数是C Run-time Library或我们熟悉的c运行时库,而ZeroMemory是win32 api的版本。 在需要跨平台时使用memset,在win下工作时使用ZeroMemory也不为过。

必须明确ZeroMemory在win32下是宏,不是函数。

这是基础性的,但我发现在学习中没有注意。 我希望能帮助很多初学者。

完成正文2011-12-10 (更新)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。