BBS水木清华站∶精华区

发信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信区: test 
标  题: 星星流讲座 0009 
发信站: ☆清华电机☆ (Sun May  7 02:24:22 1995) 
 
 
第 3 讲 之 2            阵列与字串 
                        Topic: Concept of String -- Character array 
 
前面谈到 C 语言使用 char 这个型别来存放字元,一个字元只能放一个 
英文字,这对实际上的需求来说是不够的。我们常常需要储存一个字 (word) 
而非一个字元 (character),这个时候就必须找找有没有处理字串的功能 
了。 
 
C 语言并没有字串这种资料型态,它把字串看成是字元阵列。什麽是阵列 
(array) 呢?我们以下面的图来说明: 
 
        char a; 
                ┌┐ 
                └┘                    <---- 只能放一个字元 
 
        char a[10]; 
                ┌┬┬┬┬┬┬┬┬┬┐  <---- 可以放十个字元 
                └┴┴┴┴┴┴┴┴┴┘ 
 
一个基本型态的变数,一次只能存一笔资料。阵列型态的变数就不同了, 
它一次可以存很多笔资料,而且这些资料是循序地放置在阵列之中,由 
第 0 个开始算起。C 把字串看成是字元阵列,因为字串就是字元依序 
排列的结果,恰好可以利用字元阵列来达成,日後你会发现这个设计是非 
常巧妙而有用的。 
 
阵列的宣告是如 char a[10]; 这种型式,变数名字後面紧接著中括号,这 
个中括号叫做「注标」,注标内括的数字就是这个阵列的大小,例如 a[10] 
就是由 a[0] 到 a[9] 一共 10 个元素。我们可以用像 a[0] 这种形式取出 
阵列中某一个特定的元素,就好像使用一般基本型态的变数一样。 
 
在 C 语言中,字串在字元阵列中的排列是像下图这种样子: 
 
       a[0] a[1] a[2] a[3] a[4] a[5] 
        ┌—┬—┬—┬—┬—┬—┐ 
        │H │e │l │l │o │\0│ 
        └—┴—┴—┴—┴—┴—┘ 
 
像 Hello 一共有五个字元,就存放於阵列中第 0 个到第 5 个的位置,最後 
加上 \0 做为结束。前面已经提过逸出序列的用法,\0 是代表 ASCII 码为 0 
的字元,它的意义就是 NULL (空字元),C 语言中以 \0 代表一个字串的结 
尾,每个字串的最後都必须以一个 \0 代表字串结束。由於必须加上 \0 的 
关系,所以每个字串必须配置一个比它的字元长度多 1 的阵列来存放才不会 
产生错误,例如 Hello 一共五个字元,则我们必须配置一个 char a[6]; 的 
阵列才能储存它。 
 
那麽我要怎麽给定字串的初值呢?以下是一个最常见的错误: 
 
        char a[6]; 
        a = "Hello"; 
 
这种做法是错误的,字串不能以这种方式给定初值,如果要给定字串的初值, 
必须照像下面□例程式的作法: 
 
/* initstring.c */ 
#include <stdio.h> 
#include <string.h> 
 
main () 

    char a[6]; 
    strcpy (a, "Hello"); 
    printf ("%s\n", a); 

 
执行结果: 
 
Hello 
 
你必须 #include <string.h>,然後使用 strcpy 这个函数来给定字串的初 
值,字串是以双括号 " 括起来的,和括字元用的单括号 ' 不同。程式中 
printf 的参数 %s 是用来显示字串用的。 
 
-- 
本文原作者为徐振家,原作刊载於星星神教总坛 ☆清华电机☆ test 板。 
你可以以电子文件的形式将本文自由流传於台湾学术网路,但必须包含此版权声明。 
原作者依中华民国著作权法之规定,享有本文之著作权,请勿抄袭以免触法。 
未经授权任何人不得以任何形式对本文做任何修改及商业上之应用。 
其他网路的转载或其他用途的应用,请先知会作者,并取得其同意。 
对本文有任何疑问或意见请 mail 给 ax.bbs@bbs.ee.nthu.edu.tw,谢谢。 
 
 

BBS水木清华站∶精华区