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.