iT邦幫忙

1

【從零開始的 C 語言筆記】第十四篇-Array介紹與應用(2)

  • 分享至 

  • xImage
  •  

不怎麼重要的前言

上一篇我們介紹了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;
}

https://ithelp.ithome.com.tw/upload/images/20211028/20142565YwnkNWSBYz.png

可以看到這時我們居然很神奇的可以在printf中使用「%s」,把設定好的字串列印出來了!


正式使用char array儲存字串

  1. 宣告char array
    就跟一般的陣列宣告一樣,char array也有下面三種宣告方式。

(1) 只給予陣列大小

char str[20];

(2) 不給陣列大小,但直接放入字串(賦值)

char str[] = "Hello World!";

(3) 給予陣列大小、放入字串

char str[20] = "Hello World!";
  1. 要記得字串的字尾會自動加入「\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;
}

https://ithelp.ithome.com.tw/upload/images/20211028/20142565QGHAw8nChT.png

  1. 實際應用
#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;
}

https://ithelp.ithome.com.tw/upload/images/20211028/20142565CsVHaoPh11.png


char array小結

基本上就是一般陣列的規則,差別只在於scanf時可以一次讀取整個字串,但因為scanf的遇到關係,只要包含空白字就會自動分割,所以使用scanf時不能讀取包含空格的字串,除非特殊用法或是使用「gets();」、「fgets( )」。

(對於「gets();」使用方法有興趣的朋友,可以點這裡)
(對於「fgets();」使用方法有興趣的朋友,可以點這裡)


這次的內容差不多就到這裡了,不曉得有沒有解決大家的疑惑呢?

下一篇我們來介紹字串的相關應用--string函式庫!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言