A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 那个Mr_Z 中级黑马   /  2014-4-5 20:27  /  1424 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

假如有一个整型数组,int arrary[],直接用strlen()函数可以么?在这里是否等于sizeof(ages)/sizeof(int)

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

4 个回复

正序浏览
在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[] 的长度,因此二者不相等。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 董月峰 于 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)

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
严重同意楼上
回复 使用道具 举报
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值。所以假如你这个数组中没有'\0'字符,那么这个值就不确定的,所以和sizeof(ages)/sizeof(int) 是完全不同的。sizeof(ages)/sizeof(int) 是计算出这个数组有多少个元素。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马