string

描述

文字字串可以用兩個方式表示:字串物件或者用空字符終止 (\0 結尾) 陣列,這個頁面將介紹後者,而另一個字串物件可以提供更多的函式,但也更占用記憶體,資料請參考 字串物件 頁面。

範例

所有有效的字串宣告:

  char Str1[15];
  char Str2[8] = {'8', '6', 'd', 'u', 'i', 'n', 'o'};
  char Str3[8] = {'8', '6', 'd', 'u', 'i', 'n', 'o', '\0'};
  char Str4[ ] = "86duino";
  char Str5[8] = "86duino";
  char Str6[15] = "86duino";

 
可能的字串宣告方式

  • 宣告一個沒有初始化的字元陣列,像是 Str1
  • 宣告一個字元陣列 (多出一個字元大小),則編譯器會補上一個必要的空字元 \0,像是 Str2
  • 確實的加上 \0 字元,像是 Str3
  • 用雙引號括住一個字串常數,編譯器將會計算符合此字串常數 (含 \0 字元) 的陣列大小,像是 Str4
  • 初始化字串陣列的時候給一個明確的大小和字串常數,像是 Str5
  • 初始化陣列的時候為字串常數配置更大的空間,像是 Str6

空字符

一般來說,字串會以空字元做結尾 (ASCII 編碼為 0),它讓函式 (例如 Serial.print()) 能知道哪邊是字串的結尾(它們會讀取連續的記憶體空間而不是部份的字串)。

這也代表你的字串需要能容納一個字元以上的空間,這就是為什麼 Str2Str5 會需要8個字元,即便 ”86duino” 只有 7 個字元,最後一個陣列元素將會被編譯器自動補上空字元;Str4 會自動地被調整成 8 個字元的大小,其中一個是給空字元的;在 Str3 中,我們有確實的加上空字元 ('\0')。
注意,這邊可以故意不給最後的空字元 (如果指定 Str2 的大小是7個字元而不是8個),不過這樣做可能會造成大部分使用此字串的函式出現奇怪行為。當你發現這些處理字元的函式出現與預期不符的行為時,這可能就是問題的原因之一。

使用單引號或者雙引號?

字串將會被定義在雙引號中 (“Abc”),而字元會被定義在單引號中 (‘A’)。

長字串換行

你可以用以下的方式將過長的字串換行:

char myString[] = "This is the first line"
" this is the second line"
" etcetera";

 
字串陣列

字串陣列在處理大量的文字時相當的方便,像是 LCD 顯示的專案等等;因為字串本身就是以陣列方式儲存,所以儲存字串的陣列就是一個二維陣列,如下面的範例所示。

在下面的程式碼中,char 資料型別後的星號表示每一個陣列名稱都是一個指標,每個指標都指向一個字串,所以必須宣告一個二維陣列。指標對於 C 的初學者來說是很不容易理解的,但是在這裡不用理解指標的細節就可以使用它們。

範例

char* myStrings[]={"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5","This is string 6"};

void setup(){
  Serial.begin(9600);
}

void loop(){
  for (int i = 0; i < 6; i++){
    Serial.println(myStrings[i]);
    delay(500);
  }
}

See also

array
Variable Declaration


語法參考主頁面

本頁由熱血青年 LBU 譯自英文版。

The text of the 86Duino reference is a modification of the Arduino reference, and is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.