不怎么重要的前言
上一篇我们介绍了array的基本概念,这是一个非常好用也很常使用到的东西喔!
今天我们来介绍一下Array的延伸用法吧!
字串怎么储存?
不晓得大家有没有这样的想法,在第七篇的格式指令字里、我们一直使用的printf都有使用到字串,而我们的资料型态虽然有整数、浮点数跟字元,但就是没有一种资料型态可以直接用来储存字串。
这就造成很尴尬的事情,如果我们今天要储存一个字串时要怎么办?
不晓得大家还记不记得第八篇的printf里,我们很简略的提到字串(以「" "」包起来)与字元(以「' '」包起来),事实上字串就是由很多字元组成,而字元就是单一的符号,不管是a、b、c、d还是1、2、3、4,又或是「\n」、「\0」、「\t」等等的符号,它们都是字元。
不晓得大家还记不记得上一篇的array,array就是许多相同资料型态的资料汇聚,所以如果字串是很多字元组成,我们同样也可以使用字元阵列来储存它,就像以下这样:
#include <stdio.h>int main(){ char str[] = "Hello World!"; printf("data: %s\n", str); return 0;}
可以看到这时我们居然很神奇的可以在printf中使用「%s」,把设定好的字串列印出来了!
正式使用char array储存字串
宣告char array就跟一般的阵列宣告一样,char array也有下面三种宣告方式。
(1) 只给予阵列大小
char str[20];
(2) 不给阵列大小,但直接放入字串(赋值)
char str[] = "Hello World!";
(3) 给予阵列大小、放入字串
char str[20] = "Hello World!";
要记得字串的字尾会自动加入「\0」看完以上的宣告方式,其实是跟一般的阵列差不多的,不过有一个重要的事情必须要说,如同"Hello World!"加上空格与「!」也才12个字元,但字串储存时最后其实还会插入一个看不见的符号「\0」,作为标示字串结尾,在列印时函式才会自动结束。
所以1-(2)的阵列大小会被自动分配为13,而不是12。
我们来看以下的例子就知道了:
#include <stdio.h>int main(){ char str[] = "Hello World!"; printf("data: %s\n", str); printf("str size: %d\n", sizeof(str)); return 0;}
#include <stdio.h>int main(){ char str[20]; printf("plz input a str:"); scanf("%s", str); printf("---\n"); printf("data: %s\n", str); printf("str size: %d\n", sizeof(str)); printf("---\n"); str[10] = 'A'; printf("data: %s\n", str); printf("str size: %d\n", sizeof(str)); return 0;}
char array小结
基本上就是一般阵列的规则,差别只在于scanf时可以一次读取整个字串,但因为scanf的遇到关係,只要包含空白字就会自动分割,所以使用scanf时不能读取包含空格的字串,除非特殊用法或是使用「gets();」、「fgets( )」。
(对于「gets();」使用方法有兴趣的朋友,可以点这里)
(对于「fgets();」使用方法有兴趣的朋友,可以点这里)