String - char array

出自YFRobotwiki
跳轉到: 導覽搜尋

描述

文本字元串可以有兩種表現形式。你可以使用字元串數據類型(這是0019版本的核心部分),或者你可以做一個字元串,由char類型的數組和空終止字元('\0')構成。(求助,待潤色-Leo)本節描述了後一種方法。而字元串對象(String object)將讓你擁有更多的功能,同時也消耗更多的內存資源。


示例

以下所有字元串都是有效的聲明。

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

聲明字元串的解釋

  • 在Str1中 聲明一個沒有初始化的字元數組
  • 在Str2中 聲明一個字元數組(包括一個附加字元),編譯器會自動添加所需的空字元
  • 在Str3中 明確加入空字元
  • 在Str4中 用引號分隔初始化的字元串常數,編譯器將調整數組的大小,以適應字元串常量和終止空字元
  • 在Str5中 初始化一個包括明確的尺寸和字元串常量的數組
  • 在Str6中 初始化數組,預留額外的空間用於一個較大的字元串

空終止字元

一般來說,字元串的結尾有一個空終止字元(ASCII代碼0)。以此讓功能函數(例如Serial.pring())知道一個字元串的結束。否則,他們將從內存繼續讀取後續位元組,而這些並不屬於所需字元串的一部分。

這意味著,你的字元串比你想要的文字包含更多的個字元空間。這就是為什麼Str2和Str5需要八個字元,即使「Arduino」只有七個字元 - 最後一個位置會自動填充空字元。str4將自動調整為八個字元,包括一個額外的空。在Str3的,我們自己已經明確地包含了空字元(寫入'\ 0')。

需要注意的是,字元串可能沒有一個最後的空字元(例如在Str2中您已定義字元長度為7,而不是8)。這會破壞大部分使用字元串的功能,所以不要故意而為之。如果你注意到一些奇怪的現象(在字元串中操作字元),基本就是這個原因導致的了。

單引號?還是雙引號?

定義字元串時使用雙引號(例如「ABC」),而定義一個單獨的字元時使用單引號(例如'A')

包裝長字元串

你可以像這樣打包長字元串:

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

字元串數組

當你的應用包含大量的文字,如帶有液晶顯示屏的一個項目,建立一個字元串數組是非常便利的。因為字元串本身就是數組,它實際上是一個兩維數組的典型。

在下面的代碼,」char*」在字元數據類型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);
  }
}


擴展閱讀

- array
- PROGMEM
- integer constants(整型常量)


返回Arduino語法參考列表

更多建議和問題歡迎反饋至 YFRobot論壇