字符串
[数据类型]
描述
文本字符串可以通过两种方式表示。你可以使用 String 数据类型,或者你可以创建一个 char 类型的数组并将其以 null 结尾。这一页描述了后一种方法。有关 String 对象的更多详细信息(它提供了更多功能,但会消耗更多内存),请参阅 String 对象页面。
语法
以下都是有效的字符串声明:
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。
- 声明一个字符数组(带有一个额外的字符空间),编译器将添加所需的 null 字符,如 Str2。
- 显式添加 null 字符,如 Str3。
- 使用双引号中的字符串常量进行初始化;编译器将调整数组大小以适应字符串常量和终止 null 字符,如 Str4。
- 使用显式大小和字符串常量初始化数组,如 Str5。
- 初始化数组,为更长的字符串留出额外空间,如 Str6。
空终止符:
通常,字符串以 null 字符(ASCII 码为 0)终止。这允许函数(如 Serial.print())知道字符串的结束位置。否则,它们将继续读取实际上不属于字符串的后续内存字节。
这意味着你的字符串需要比你想包含的文本多一个字符的空间。这就是为什么 Str2 和 Str5 需要 8 个字符的原因,即使 "arduino" 只有七个字符——最后一个位置自动填充 null 字符。Str4 将自动调整为 8 个字符大小,其中一个用于额外的 null。在 Str3 中,我们已经显式地包含了 null 字符(写为 '\0')。
请注意,有可能创建一个没有 null 字符终止的字符串(例如,如果你将 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);
}
}
扩展阅读