Linux 版 (精华区)

发信人: netiscpu (夜☆星光点点☆), 信区: Linux
标  题: ◇ 星星流讲座 0009
发信站: 紫 丁 香 (Sun Nov  8 18:25:10 1998), 转信


寄信人: guest.bbs@hgluo.hust.edu.cn 
标  题: ◇ 星星流讲座 0009
发信站: 华南理工大学 BBS木棉站
日  期: Thu Feb 20 14:40:39 1997

发信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信区: test
标  题: 星星流讲座 0009
发信站: ☆清华电机☆ (Sun May  7 02:24:22 1995)


;35m第 3 讲 之 2            阵列与字串
                        Topic: Concept of String -- Character arraym

前面谈到 C 语言使用 char 这个型别来存放字元,一个字元只能放一个
英文字,这对实际上的需求来说是不够的。我们常常需要储存一个字 (word)
而非一个字元 (character),这个时候就必须找找有没有处理字串的功能
了。

C 语言并没有字串这种资料型态,它把字串看成是字元阵列。什麽是阵列
(array) 呢?我们以下面的图来说明:

        char a;
                ┌┐
                └┘                    <---- 只能放一个字元

        char a[10];
                ┌┬┬┬┬┬┬┬┬┬┐  <---- 可以放十个字元
                └┴┴┴┴┴┴┴┴┴┘

一个基本型态的变数,一次只能存一笔资料。阵列型态的变数就不同了,
它一次可以存很多笔资料,而且这些m资料是循序地放置在阵列之中,由
第 0 个开始算起0m。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 (空字元),mC 语言中以 \0 代表一个字串的结
尾,每个字串的最後都必须以一个 \0 代表字串结束0m。由於必须加上 \0 的
关系,所以每个字串必须配置一个比它的字元长度多 1 的阵列来存放才不会
产生错误,例如 Hello 一共五个字元,则我们必须配置一个 char a[6]; 的
阵列才能储存它。

那麽我要怎麽给定字串的初值呢?m以下是一个最常见的错误0m:

        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,谢谢。


--
m;32m※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: mtlab.hit.edu.cn]
--

                              Enjoy Linux!
                          -----It's FREE!-----

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.217毫秒