'\0'就是8位的00000000,因为字符类型中并没有对应的这个字符,所以这么写。在数值类型里就代表数字0。 数值类型存储时,最高位决定正负号,其他位都为0可不就是0了么? '\0'是转译字符,意思是告诉程序,这不是字符0,我要的是数字0的2进制直接放进来,因为acsii码的0可不是00000000
'\0'就是 字符串结束标志。 比如说,把一个字符串赋值给数组: u8 str1[]={"cxjr.21ic.org"}; 实际上数组str1在内存中的实际存放情况为: c x j r . 2 1 i c . o r g '\0' 这后面的'\0'是由C编译系统自动加上的。所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。 把字符数组str1中的字符串拷贝到字符数组str2中。串结束标志'\0'也一同拷贝。 但是……也有一些例外情况发生。 比如,当数组长度不够。假设我们指定了数组长度,如: u8 str1[13]={"cxjr.21ic.org"}; 由于字符组str1的长度为13,所以后面的信息会丢失,即'\0'丢失。 另外,如果在给数组赋值时,把每个字符单独用引号括起来。也会丢失'\0'。如: u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g'}; 如果希望数组以'\0'结束,则要么写成: u8 str1[]={"cxjr.21ic.org"}; 要么写成(人工添加'\0'): u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g','\0'}; 要么写成(故意给数组预留一个空位): u8 str1[14]={'c','x','j','r','.','2','1','i','c','.','o','r','g'}; /******************************************************************************************************************************************************/ http://bbs.21ic.com/icview-126610-1-1.html §7.3 字符数组 用来存放字符数据的数组是字符数组。字符数组中的一个元素存放一个字符。 7.3.1 字符数组的定义 定义的方法与前面介绍的类似,如: char c[3]; c[0]=’b’; c[1]=’m’;c[2]=’u’; 由于字符型与整型是互相通用的,因此上面的定义也可改为 int c[3]; 7.3.2 字符数组的初始化 对字符数组的初始化就是逐个字符赋给数组中各元素。如:static char c[3]={’b’,’m’,’u’}; 如果花括弧中提供的初值个数大于数组长度,则作语法错误处理,如果花括弧中提供的初值个数小于数组长度,则其余的元素自动定为空字符。 7.3.3 字符数组的引用 可以引用数组中的一个元素,得到一个字符。 例:输出一个字符串。 void main(void ) { static char c[8] = {’c’,’o’, ’m’,’p’, ’u’,’t’, ’e’,’r’}; int i; for(i=0;i<10;i++) printf("%c",c); printf("\n"); } 运行结果: computer 7.3.4 字符串和字符串结束标志 为 了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符'\0’代表。如果有一个字符串,其第10个字符为'\0’,则此字符串的有效字符 为9个。即遇到字符'\0’时,表示字符串结束,由它前面的字符组成字符串。系统对字符串常量自动加一个'\0’作为结束符。因此对字符串的可以写成: static char c[ ]= "computer" 需要说明的是:字符数组并不要求它的最后一个字符为’\0’,但是只要用字符串常量就会自动加上一个’\0’。因此人们为了便于测定字符串的实际长度,以及在程序中作相应的处理,在字符数组中常常认为地加上一个’\0’,如: static char c[6]={’c’,’h’,’i’, ’n’,’a’,’ \0’,}; 7.3.5 字符数组的输入和输出 有两种方法:
printf("%s",c);[/BLOCKQUOTE] 注意:
7.3.6 字符串处理函数 在C的函数库中提供了一些用来处理字符串的函数,下面介绍几种常用的函数:
7.3.7 字符数组应用举例 例:输入一行字符,统计其中有多少个单词,单词之间用空格隔开。 #include "stdio.h" void main(void ) { char string[81]; int i,num = 0,word = 0; char c; gets(string); for(i=0;(c=string )!=’\0’;i++) if(c= =’ ’) word=0; else if(word= =0) { word=1; num++ } 算法如上图 printf("There are %d words in the line\n",num); } 运行情况如下: I am a boy. ↙ There are 4 words in the line |
|
来自: changqiong0606 > 《C/C 》