[C語言_01] 字元陣列,字串傻傻分不清楚?

Andy Cheng
Andy的趣味程式練功坊
3 min readMar 27, 2019

關於本文

本篇文章會介紹C語言字元陣列和字串的區別,讓大家可以輕鬆玩C語言char[]的字串,那麼廢話不多說,我們就開始撰寫C語言吧!

Photo by Fab Lentz on Unsplash

字元陣列與字串,傻傻分不清楚?

C語言並沒有 「string」這種類型的的資料型別,但我們還是想寫字串呀,這時候我們只能透過「char []」矩陣來模擬字串,那要注意的事情是:

字串絕對是char類型陣列,但char類型陣列不一定是字串

這是啥意思呢?我們先介紹一下結尾符的概念:

C++的字元陣列,如果要表示成字串,要在最後一個元素加上 ’\0' ,意思是跟系統說,我的字串就到這邊結尾呦!

// 字串
char c1[] = { 'h', 'a', 'p', 'p', 'y', '\0'};
printf("%s", c1); // 記得要用""及%s
// 輸出 happy

那如果我調皮又懶惰,就是不想加‘\0’做結尾呢? 那麼這個陣列就不是一個字串,只是普通字元數組,輸出可能會有亂碼,因此字串算是一種特殊的char類型陣列。

好難理解喔,我們還是直接看程式碼吧!

字串的幾種初始化方式

第一種 - 不指定長度,沒有結束符(超不優)

char c1[] = { 'a', 'b', 'c' }; printf("%s\n", c1); // abc亂碼

第二種 - 指定長度,後面元素沒有賦值(後面的元素自動補空)

char c2[100] = { 'a', 'b', 'c' };printf("%s\n", c1); // abc

第三種 - 不指定長度,最後加上’\0' or 0

char c1[] = { 'a', 'b', 'c' ,'0'};
char c2[] = { 'a', 'b', 'c' ,0 }; //直接寫0也可以
printf("%s\n", c1); // abc
printf("%s\n", c2); // abc

第四種 - 使用兩個引號初始化,編譯器會自動在後面補’\0'(非常常用)

char c2[] = "你快樂嗎?";printf("%s\n", c1); // 你快樂嗎?

字串的輸入與輸出

因為字串有加上’\0'結尾符的關係,輸入輸出變得超級方便的,但要注意的是,用 scanf 讀取字串時,遇到空白字元便會結束。

// 定義一個能容納一百個字元的字元陣列
char str[100];
printf("input string1 : \n");
// 輸入字串
scanf("%s", str);
// 輸入coffee shop
printf("output:%s\n", str);
// 輸出coffee

字串的追加

這裡用笨方法來將兩個字串合併起來,下一章節講述字串的函數使用後,會更簡單XD

今天介紹就先到這邊~希望有為你解惑,下一篇會著重在字串的函數使用,大家好好期待:)

我是Andy,謝謝你看完這篇文章,如果文章有幫助到你的話,希望不吝於幫我拍手 🙌🙌

--

--

Andy Cheng
Andy的趣味程式練功坊

若能將學到的知識轉化為易懂的文章,才能算是真正學會。這是我創建這個帳號的初衷。