字符串长度 与数组长度

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

  1. 12 ,13
  2. 3 ,11
  3. 3 ,9
  4. 3 ,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<stdio.h>
#include<string.h>
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'

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章