C语言之——strlen()与sizeof()
2011-02-01 17:56
393 查看
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'/0'为止,然后返回计数器值。
函数原型:extern unsigned int strlen(const char *s);
头文件:string.h
与sizeof()的区别:
strlen(char *)函数求的是字符串的实际长度,它求得方法是从字符串首地址开始扫描直到遇到'/0',如果只定义了一个字符串而没有给它赋值,对其求strlen的结果是不确定的。
char aa[10];cout<<strlen(aa)<<endl; //结果是不定的
char aa[10]={'/0'};cout<<strlen(aa)<<endl; //结果是0
char aa[10]="jun";cout<<strlen(aa)<<endl; //结果是3
sizeof()求的是变量声明后所占的内存数,不是长度,并且sizeof不是函数,它是一个操作符。
区别可以总结为:
1.sizeof是操作符,strlen是函数
2.sizeof可以用类型做参数,strlen只能用char *做参数,且必须以'/0'结尾
3.一般情 况下,sizeof在编译阶段就计算过了,而strlen的值是在运行时才确定的。
举例:
main(){
char * s="123";
char ss[]="123";
char sss[10]="123";
printf("/n%d ",strlen(s));//3
printf("%d ",strlen(ss));//3
printf("%d ",strlen(sss));//3
printf("%d ",sizeof(s));//2
printf("%d ",sizeof(ss));//4
printf("%d ",sizeof(sss));//10
}
class X
{
int i;
int j;
char k;
};
X x;
cout<<sizeof(X)<<endl; 结果 12 ===》内存补齐
cout<<sizeof(x)<<endl; 结果 12 同上
自定义函数实现strlen()函数的功能 下面几种实现strlen函数的源代码大家参考
-------------------------------------------------1:start------------------------------------
#include <stdio.h>
#include <assert.h>
typedef unsigned int u_int;
u_int Mystrlen(const char *str)
{
u_int i;
assert(str != NULL);
for (i = 0; str[i]!= '/0'; i++);
return i;
}
------------------------------------------------1:end--------------------------------------
-------------------------------------------------2:start--------------------------------------
int strlen(const char *str)
{
assert(str != NULL);
int len = 0;
while((*str++) != '/0')
len++;
return len;
}
------------------------------------------------2:end ------------------------------------------
------------------------------------------------3:start------------------------------------------
int strlen(const char *str)
{
assert(str);
const char *p = str;
while(*p++!=NULL);
return p - str - 1;
}
-------------------------------------------------3:end-----------------------------------------
-------------------------------------------------4:start----------------------------------------
int strlen(const char *str)
{
assert(str);
if (*str==NULL)
return 0;
else
return (1 + strlen(++str));
}
-----------------------------------------------4:end----------------------------------------
以上各种实现的方式都是大同小异的,有的用的是变量,有的用的是指针。
其中,最后一个用的是递归的方式。其实,在实现库函数的时候,是规定不可以
调用其他的库函数的,这里只是给大家一个方法,不用变量就可以实现strlen。
函数原型:extern unsigned int strlen(const char *s);
头文件:string.h
与sizeof()的区别:
strlen(char *)函数求的是字符串的实际长度,它求得方法是从字符串首地址开始扫描直到遇到'/0',如果只定义了一个字符串而没有给它赋值,对其求strlen的结果是不确定的。
char aa[10];cout<<strlen(aa)<<endl; //结果是不定的
char aa[10]={'/0'};cout<<strlen(aa)<<endl; //结果是0
char aa[10]="jun";cout<<strlen(aa)<<endl; //结果是3
sizeof()求的是变量声明后所占的内存数,不是长度,并且sizeof不是函数,它是一个操作符。
区别可以总结为:
1.sizeof是操作符,strlen是函数
2.sizeof可以用类型做参数,strlen只能用char *做参数,且必须以'/0'结尾
3.一般情 况下,sizeof在编译阶段就计算过了,而strlen的值是在运行时才确定的。
举例:
main(){
char * s="123";
char ss[]="123";
char sss[10]="123";
printf("/n%d ",strlen(s));//3
printf("%d ",strlen(ss));//3
printf("%d ",strlen(sss));//3
printf("%d ",sizeof(s));//2
printf("%d ",sizeof(ss));//4
printf("%d ",sizeof(sss));//10
}
class X
{
int i;
int j;
char k;
};
X x;
cout<<sizeof(X)<<endl; 结果 12 ===》内存补齐
cout<<sizeof(x)<<endl; 结果 12 同上
自定义函数实现strlen()函数的功能 下面几种实现strlen函数的源代码大家参考
-------------------------------------------------1:start------------------------------------
#include <stdio.h>
#include <assert.h>
typedef unsigned int u_int;
u_int Mystrlen(const char *str)
{
u_int i;
assert(str != NULL);
for (i = 0; str[i]!= '/0'; i++);
return i;
}
------------------------------------------------1:end--------------------------------------
-------------------------------------------------2:start--------------------------------------
int strlen(const char *str)
{
assert(str != NULL);
int len = 0;
while((*str++) != '/0')
len++;
return len;
}
------------------------------------------------2:end ------------------------------------------
------------------------------------------------3:start------------------------------------------
int strlen(const char *str)
{
assert(str);
const char *p = str;
while(*p++!=NULL);
return p - str - 1;
}
-------------------------------------------------3:end-----------------------------------------
-------------------------------------------------4:start----------------------------------------
int strlen(const char *str)
{
assert(str);
if (*str==NULL)
return 0;
else
return (1 + strlen(++str));
}
-----------------------------------------------4:end----------------------------------------
以上各种实现的方式都是大同小异的,有的用的是变量,有的用的是指针。
其中,最后一个用的是递归的方式。其实,在实现库函数的时候,是规定不可以
调用其他的库函数的,这里只是给大家一个方法,不用变量就可以实现strlen。
相关文章推荐
- C语言中sizeof与strlen区别2
- c语言标识符,数据类型,sizeof和strlen区别及面试题
- C语言中Sizeof与Strlen的区别
- C语言的sizeof和strlen
- sizeof 和 strlen的一些区别(用C语言代码表示)
- c语言实现strcmp和strlen、sizeof
- C语言中sizeof与strlen区别
- C语言中strlen与sizeof的区别(`$~新年快乐~$`!)
- C语言中sizeof与strlen区别
- C语言——strlen()和sizeof的区别
- C语言中关于sizeof 和 strlen的区别分析
- 【C语言天天练(五)】strlen和sizeof
- 我的小小学习笔记(1)之C语言--sizeof&strlen(1)
- c语言中strlen 和 sizeof的区别
- c语言数组遇上sizeof和strlen
- C语言学习之sizeof和strlen对比
- c语言中sizeof()和strlen()的区别
- C语言中strlen()函数和sizeof()函数区别[关于字符串长度]
- C语言中的sizeof操作符用法及和strlen的区别
- c语言之sizeof 与 strlen理解