首页 > 其他 > 详细

C sizeof 和 strlen 的区别

时间:2015-09-13 10:36:50      阅读:243      评论:0      收藏:0      [点我收藏+]

首先 sizeof是操作符,strlen是函数,两者不在同一维度上。

其次 sizeof是操作符,返回一个对象或类型名的长度,不限定类型;strlen是<string.h>中计算C风格字符串长度的函数(只能是C风格字符串,C++的string类的对象都不行)。

再次 单就C风格字符串来看

#include <stdio.h>
#include <string.h>
#define N 100
int main(void)
{
    char a[] = "abcdefhig";
    char b[N] = "abcdefhig";
    char *c = a;


    printf("a: sizeof %d strlen %d\n", sizeof(a), strlen(a));
    printf("b: sizeof %d strlen %d\n", sizeof(b), strlen(b));
    printf("c: sizeof %d strlen %d\n", sizeof(c), strlen(c));

}

输出

a: sizeof 10 strlen 9
b: sizeof 100 strlen 9
c: sizeof 4 strlen 9

第一行:对于一个C风格字符串的首地址,sizeof返回字符串的长度时,将结尾的‘\0‘字符算作字符串的一部分;strlen则不将‘\0‘字符算在内。

第二行:sizeof返回对象的长度,b的长度为100;而strlen只是计算了‘\0‘字符之前的长度。

第三行:对于一个指向数组首地址的指针,sizeof返回对象包含对象的大小,即指针的大小,4个字节;strlen则还是计算b指向字符串的长度,且不包括结尾的‘\0‘。

此处能看出两者的差异了。

最后,sizeof作为操作符用处更广,可以计算给定对象或类型名的长度,不论是内置类型或者是自定义的类或结构体。对于结构体或类的定义,由于涉及到计算机内存分配中的对齐策略,即对象起始地址的偏移量是4的整数倍,所以sizeof返回的结构体或类的长度,可能和“纸面上”的数值不一样。


C sizeof 和 strlen 的区别

原文:http://my.oschina.net/u/2313065/blog/505447

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!