字符串长度 与数组长度

字符串长度 与数组长度

对于定义 char str[] = "abc\000def\n"(注:其中0为数字零),求字符串str的长度len和数组str的大小size,len和size分别是: (2分)(2)

12 ,133 ,113 ,93 ,4

1.数组长度的计算:整形数组大小:sizeof(数组名)/sizeof(数组类型)。 字符数组大小:strlen(数组名)+1,1因为要加上'/0',所以 再加1.

2.字符串长度的计算:

字符串长度是指字符串所含的字符个数,但不包括最后的'\0'。sizeof(str)

C语言的字符串是由字符数组形式保存的,并约定'\0'(ascii码值为0)作为字符串结束符。其长度为从字符串开始,到'\0'结束,所有字符的个数,不包括'\0'本身。

"abcd\n" -------长度应该为5(\n转义符) ,转义字符也算一个字符的。

1、c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数)。例如:

1

2

3

4

int data[4];

int length;

length=sizeof(data)/sizeof(data[0]); //数组占内存总空间,除以单个元素占内存空间大小

printf("length of data[4]=%d", length ); //输出length of data[4]=4

2、但是,通过传递数组名参数到子函数中,以获得数组长度是不可行的。

例如:

1

2

3

4

5

int getLength(int[] a){

int length;

length=sizeof(a)/sizeof(a[0]); //这样是错误的,得到的结果永远是1

return length;

}

因为,a是函数参数,到了本函数中,a只是一个指针(地址,系统在本函数运行时,是不知道a所表示的地址有多大的数据存储空间,这里只是告诉函数:一个数据存储空间首地址),所以,sizoef(a)的结果是指针变量a占内存的大小,一般在32位机上是4个字节。a[0]是int类型,sizeof(a[0])也是4个字节,所以,结果永远是1。3、因此,获得数组长度,只能在数组定义所在的代码区中,采用以上方法,才可以达到效果。

* strlen用来求字符串的长度用的 而sizeof是用来求指定变量或者变量类型等所占内存大小用的(需要加上'\0'的位置) 比如strlen("nihao")它的结果是5 而sizeof(int)它的结果是2也就是说int型占两个字节

#include

#include

int main(){

int m,n;

m=sizeof("abc\000def\n");

n=strlen("abc\000def\n");

printf("%d %d",m,n);

}

运行结果是9 3 (注:\000和\00和\0所占的内存是一样的(疑问)

只有计算字符长度时不许考虑'\0'

猜你喜欢

[世界杯]熊猫说球第二十一集:假摔
365审核要多久

[世界杯]熊猫说球第二十一集:假摔

07-07 3297
无底之胃
365审核要多久

无底之胃

07-16 1603
腾达E10无线路由器论坛
365提款验证地址是什么

腾达E10无线路由器论坛

07-03 9886
为什么很多明星都是狮子座,哪个明星是狮子座的
苹果手机主板维修多少费用  ( 苹果手机换个主板大概多少钱? )
三星 GALAXY S6/G9200(2015年04月上市)
365提款验证地址是什么

三星 GALAXY S6/G9200(2015年04月上市)

07-05 1618