C语⾔中整形数组、字符数组、字符串的区别
⼀、
第⼀整型数组的存放,数组最后是不加'\0'的,字符串会⾃动加上,因此存放字符的时候数组的⼤⼩要⽐实际字符的多⼀个第⼆整型数组每⼀个单元是4个字节的,字符串是⼀个⼀个字符存放的,每个字符占⼀个
⼆,字符数组与字符串的区别
C语⾔中没有专门的字符串变量,如果要将⼀个字符串存放在变量中,必须使⽤字符数组,即⽤⼀个字符型数组来存放⼀个字符串,数组中每⼀个元素存放⼀个字符。
<1> 定义: char c[10]
字符型与整型互相通⽤,因此 int c[10] 也可以定义字符数组。但由于两种类型分配字节不同, ⽤整型来定义会浪费空间, 另外这样定义实际意义也不⼤, 只是为了说明其合法性。
<2> 初始化:
最简单的⽅法即逐个赋值: char c[10]={'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'}; 10个字符分别赋绐c[0]到c[9]10个元素。
如果初值个数⼩于数组长度,则只将这些字符赋绐数组中前⾯的元素,其余元素⾃动定为空字符(即'\0')。
如char c[12]={'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'}; 则c[10]、c[11]值都为'\0' 。
C语⾔中,将字符串作为字符数组来处理。⼀般我们⽤字符数组来存放字符串时,都要先确定⼀个⾜够⼤的数组,⽽实际并⽤不了那么多,⽽我们只关⼼其有效位,为测定字符串实际长度,C规定了⼀个"字符串结束标志",以字符 '\0' 代表。如果有⼀个字符串,其中第10个字符为'\0',则此字符串的有效字符为9个。也就是说,在遇到字符'\0'时,表⽰字符串结束,由它前⾯的字符组成字符串。
系统对字符串常量也⾃动加⼀个'\0'作为结束符。
对于语句: pirntf("How do you do? \n"); 实际上该字符串在内存中存放时,系统⾃动在最后⼀个字符'\0'的后⾯加了⼀个'\0'作为字符串结束标志,在执⾏printf函数时,每输出⼀个字符检查⼀次,看下⼀个字符是否'\0'。遇'\0'就停⽌输出。
可以⽤字符串常量来初始化字符数组。如:
char c[]={"I am happy"};
也可直接写成:
char c[]="I am happy"; 注意此时数组的长度不是10,⽽是11,因为系统⾃动加上了'\0'结束符。
字符数组不要求最后⼀个字符为'\0',⽽为了使处理字符数组和字符串的⽅法⼀致,便于测定字符串的实际长度,能及⽅便在程序中处理, 在字符数组末尾也常加上⼀个'\0'。
<3> 字符数组的输⼊输出
(1) 逐个字符输⼊输出。⽤格式符"%c"输⼊或输出⼀个字符。
(2) 将整个字符串⼀次输⼊或输出。⽤"%S"格式符,意思是输出字符串(String)。例如:
char c[]={"china"};
printf("%S", c);
如果⼀个字符数组中包含⼀个以上'\0',则遇第⼀个'\0'时输出就结束。
(3) 若输⼊字符串长度超过字符数组所定义的长度时,将造成数组下标越界,但系统对此并不报错。
(4) ⽤%S格式输⼊字符时,遇空格、Tab键和回车将⾃动结束输⼊。
⽤scanf函数输⼊时, 遇到空格则认为⼀个字符串结束。试验如下:
#include <stdio.h>
int main()
{
char str1[5], str2[5], str3[5];
scanf("%s %s %s", str1, str2, str3);
printf("%s %s %s\n", str1, str2, str3);
return 0;
}
运⾏结果:
================================
how are you↙
how are you
================================
#include <stdio.h>
int main()
{
char str[13];
scanf("%s", str);
c语言如何创建字符串数组printf("%s\n", str);
return 0;
}
运⾏结果:
================================
how are you?↙
how
================================
由第⼆个程序可知,实际并未将这12个字符加上'\0'送到数组str中,⽽是将空格前的字符"how"送到str中,将其视为字符串处理,在其后加上'\0' 。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论