OC字符串对象主要是用length来计算字符串的长度。而C语言字符串长度的计算方法主要有两个。一个是sizeof,一个是string.h头文件下的strlen。以下是它们各自计算的区别:
1、C语言中的sizeof
1.1 sizeof(str)主要计算的是字符串占用字节的大小,并且会把''\0'结束字符计算在内。
1.2 如果传递进来的是个指针字符串,则计算的是该指针占用的字节数大小,在32位系统下面占用大小是4,64位系统下面占用大小是8。
1.3 如果传递进来的是固定大小的字符串数组,则计算的是这个字符串数组占用的字节数大小。
1.4 一个中文汉字在sizeof中按照3个字节数来计算
1.5 一个字符串数组,如果中间包含'\0'字符,sizeof会把这个字符一起计算在内。
2、C语言中的strlen
2.1 strlen是在头文件string.h下,所以使用前要引入#include <string.h>
2.2 strlen计算的是字符串的实际字节数,即不包括结束字符'\0'在内
2.3 如果传递进来的是固定大小的字符串数组,会自动忽略字符串结束字符后面的内容
2.4 一个中文汉字在strlen中按照3个字节数来计算
2.5 一个字符串数组,如果中间包含'\0'字符,strlen会计算从字符串数组开头到这个'\0'字符之间的长度,而忽略从'\0'开始到字符串数组结尾的所有字符。
3、OC字符串对象的length方法
3.1 length是OC的字符串对象的一个方法,使用前要先创建一个OC字符串对象
3.2 length计算的是字数
3.3 一个中文汉字在length中按照一个字数来计算。这种计算字符串长度的方式比较常用。
#include <string.h>
#import <Foundation/Foundation.h>
int main()
{
char *s="吩咐abc";
char str[]="吩咐abc";
char str100[100]="吩咐abc";
//int size=sizeof(s); // 结果是:8。在64位系统下面结果是8,32位系统下面应该是4。因为参数传递进来的是个指针变量,计算的是指针占用的字符串长度
//int size=sizeof(str); // 结果是:10。sizeof计算的是字符串占用字节的大小,并且包括'\0'结束符。中文一个字占用3个字节,3*2+3+1=10
//int size=sizeof(str100); // 结果是100。因为传进来的是固定大小为100的字符串数组
//int size=strlen(s); //结果是:9。strlen计算的是指针指向的字符串的字符字节数,不包括结束字符在内。
//int size = strlen(str); //结果是:9。strlen计算的是字符串的实际字节数,不包括结束符在内。
//int size=strlen(str100); //结果是:9。理由同上。
NSString *string=@"吩咐abc";
int size=[string length]; //结果是:5。字符串对象的length计算的是字数。中文也按照一个字数来计算。这种方式比较常用
NSLog(@"%d",size);
}