黑马程序员技术交流社区
标题:
关于数组长度问题
[打印本页]
作者:
那个Mr_Z
时间:
2014-4-5 20:27
标题:
关于数组长度问题
假如有一个整型数组,int arrary[],直接用strlen()函数可以么?在这里是否等于sizeof(ages)/sizeof(int)
作者:
脸皮猴
时间:
2014-4-5 21:56
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值。所以假如你这个数组中没有'\0'字符,那么这个值就不确定的,所以和sizeof(ages)/sizeof(int) 是完全不同的。sizeof(ages)/sizeof(int) 是计算出这个数组有多少个元素。
作者:
程浩
时间:
2014-4-5 22:57
严重同意楼上
作者:
董月峰
时间:
2014-4-5 23:07
本帖最后由 董月峰 于 2014-4-5 23:11 编辑
#import <Foundation/Foundation.h>
#include<string.h>
int main(int argc, const char * argv[])
{
char s[1024];
char a[3]={'2','5','a'};
s[0] = a[0];
s[1] = a[1];
s[2] = a[2];
s[3] = '\0';
printf("%s\n",s);
printf("%d\n",strlen(s));
printf("%d\n",sizeof(s));
return 0;
}
打印结果是:
25a
3
1024--------分割线----------
假如有一个整型数组,int arrary[],直接用strlen()函数可以么?在这里是否等于sizeof(ages)/sizeof(int)
不可以:strlen()函数一般是计算字符串长度的函数,整形数组中一般没有字符串结尾处的‘\0’。所以,它不等于sizeof(ages)/sizeof(int)
作者:
墨迹的可乐
时间:
2014-4-5 23:59
在C语言基础视频中,李明杰老师有一段专门讲解strlen()函数和sizeof的区别。
1,strlen()是C语言本身封装的一个函数,它的作用是计算
字符型数组(字符串)
的长度,它计算的是字符数,并不是字数,它的计算原理是从起始地址开始按字节读取,当遇到到'\0'(就是0)的时候停止,如果你的字符型数组(字符串)中包含\0,那么strlen()函数输出的结果就会产生错误。如用strlen()来计字符型以外数组(如整形),计算结果肯定是错误的。
2, sizeof是一个C语言中的一个单目运算符,用来计算数据类型所占的空间。sizeof(ages)/sizeof(int)能够计算出数组中含有的元素个数。它的运用与数据类型无关。在计算整形数组 int arrary[] 的长度时,strlen()函数不可用,而sizeof(arrary)/sizeof(int)则能够计算出 int arrary[] 的长度,因此二者不相等。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2