字符数组的长度计算:必须以终止符’/0'作为边界,但对字符数组赋值时,有两种方式:
1:定义时用字符初始化
(1)char chs[7] = {'a', 'c', '0', 'z', '3','d'}; // 长度为6
上式等价于:(2)char chs[7] = {'a', 'c', '0', 'z', '3','d', '/0'}; // 长度为6
也等价于:(3)char chs[] = {'a', 'c', '0', 'z', '3','d', '/0' }; // 长度为6
但不等价于:(4)char chs[] = {'a', 'c', '0', 'z', '3','d'}; // 长度未知,因为数组最后没有结束符'/0'
也不等价于:(5)char chs[6] = {'a', 'c', '0', 'z', '3','d'}// 长度未知,因为数组最后没有结束符'/0'
其中 :(4)和(5)也是等价的,但不应该在实际应用中出现,因为没有结束符的数组长度未知,容易出现数组越界,致使访问非法内存,造成不可预料的程序错误。
因为字符数组是C 语言的概念,可见,C 语言语法中并未保证 :字符数组的结尾一定有结束符,这就需要程序员自己采取措施,以保证在数组的最后一个元素为 '/0' 。
2: 用字符串对数组进行初始化
在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'/0'作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符'/0'存入数组,并以此作为该字符串是否结束的标志。有了'/0'标志后,就不必再用字符数组的长度来判断字符串的长度了。
C语言允许用字符串的方式对数组作初始化赋值。
例如:
char c[]={'c', ' ','p','r','o','g','r','a','m'};
可写为:
char c[]={"C program"};
或去掉{}写为:
char c[]="C program";
用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'/0'。上面的数组c在内存中的实际存放情况为:
C p r o g r a m /0
‘/0'是由C编译系统自动加上的。由于采用了‘/0'标志,所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。
3. sizeof 和 strlen 的区别
相关推荐
C语言strlen()函数:返回字符串的长度 头文件: #include strlen()函数用来计算字符串的长度,其原型为: unsigned int strlen (char *s); 【参数说明】s为指定的字符串。 strlen()用来计算指定的字符串s 的...
c语言strlen转义字符,转义字符 & sizeof & strlen-CSDN博客.mhtml
c语言中最常遇到的问题是字符串处理问题,特别是字符串长度:sizeof与strlen.两者使用时一定要区分开,否着会很容易出错。本文对两者的区别做了详细介绍。
用结构类型或变量做参数时,sizeof 返回实际的大小,当用于静态数组时,sizeof 返回全部数组的尺寸。sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸 2、运行时计算strlen,只能用char*做参数,且必须...
学过C/C++的人都知道,在C/C++中并没有提供直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取其长度,那么对于其他类型的数组如何获取他们的长度呢? 其中一种方法是使用sizeof(array) / ...
sizeof()和strlen()经常会被初学者混淆,但其中有有很大区别: sizeof() 1. sizeof()【操作数所占空间的字节数大小】是一种c中的基本运算符。 可以以类型、指针、数组和函数等作为参数。 头文件类型为unsigned int。...
本文档介绍了sizeof和strlen的区别和联系,其中sizeof为运算符,strlen为C语言库函数。而sizeof在计算字符串的长度时,将结束符'\0'也算在内,但是strlen不将它算在内。
用数组实现的字符串和用指针实现的字符串的不同点 318 字符串数组 320 11-2 通过指针操作字符串 323 判断字符串长度 323 字符串的复制 325 不正确的字符串复制 328 返回指针的函数 329 11-3 字符串处理...
字符串逆序 以下是一个使用 C 语言实现字符串逆序的简单例子。这个程序接受用户输入的字符串,然后... // 计算字符串的长度 int length = strlen(inputString); // 调用逆序函数 reverseString(inputString, le
还是只是记录下来相关位置——这是我底下未完成版本1想到的思路——用一个count[sizeof(A)]数组记录下A每个位置作为起点所能和B达到的最大重合,最后判断查找数组中最大值,此时目标子字符串的起点下标(i)和 i ...
主要介绍了C语言中sizeof()与strlen()函数的使用入门及对比,同时二者在C++中的使用情况也基本上同理,是需要的朋友可以参考下
字符串逆序 以下是一个使用 C 语言实现字符串逆序的简单例子。这个程序接受用户输入的字符串,然后输出... // 计算字符串的长度 int length = strlen(inputString); // 调用逆序函数 reverseString(inputString,
8.7.5 strlen,字符串长度 42 8.7.6 strcat,字符串追加 42 8.7.7 strncat,字符串有限追加 43 8.7.8 strcmp,字符串比较 43 8.7.9 strncmp,字符串有限比较 43 8.7.10 strcpy字符串拷贝 43 8.7.11 strncpy字符串...
一维数组、二维数组、多维数组、字符数组、动态数组的定义和引用,以及操作数组时的各种常见错误解析; 不同类型的指针之间的区别,以及指针的一般用法和注意事项; 指针与地址、数组、字符串、函数之间...
一维数组、二维数组、多维数组、字符数组、动态数组的定义和引用,以及操作数组时的各种常见错误解析; 不同类型的指针之间的区别,以及指针的一般用法和注意事项; 指针与地址、数组、字符串、函数之间的...
1.2 函数与头文件 ...1.19 sizeof与strlen的区别 1.20 实现String类的BIG_FOUR 1.21 struct和union的区别 1.22 char字符变量与int整型数据 1.23 字,字节,字符,比特 1.24 空格、空字符、字符数组结束符的区别
6.21 当数组是函数的参数时,为什么sizeof不能正确报告数组的大小? 6.22 如何在一个文件中判断声明为extern的数组的大小(例如,数组定义和大小在另一个文件中)?sizeof操作符似乎不行。 6.23 sizeof返回的大小...
1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...