上一篇我們介紹了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」,把設定好的字串列印出來了!
(1) 只給予陣列大小
char str[20];
(2) 不給陣列大小,但直接放入字串(賦值)
char str[] = "Hello World!";
(3) 給予陣列大小、放入字串
char str[20] = "Hello World!";
看完以上的宣告方式,其實是跟一般的陣列差不多的,不過有一個重要的事情必須要說,如同"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;
}
基本上就是一般陣列的規則,差別只在於scanf時可以一次讀取整個字串,但因為scanf的遇到關係,只要包含空白字就會自動分割,所以使用scanf時不能讀取包含空格的字串,除非特殊用法或是使用「gets();」、「fgets( )」。
(對於「gets();」使用方法有興趣的朋友,可以點這裡)
(對於「fgets();」使用方法有興趣的朋友,可以點這裡)