String 字符串数据

说明

文本字符串可以有两种表现形式。你可以使用string声明某个变量为字符串类型,或者你可以利用char类型的数组和终止符(‘\0’)建立一个字符串。本节描述了后一种方法。

如需获得字符串对象(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被声明为一个字符数组,编译器为该字符数组自动附加了一个终止符(\0)

– Str3明确加入终止符(\0)

– Str4用引号内的字符内容初始化字符串数组,编译器将自动调整该字符串数组的大小,也就是说Arduino可以自动为该字符串分配内存空间以适应该字符串所含有的字符内容和终止空字符内容。在程序运行中,Arduino可根据Str4中的字符数组大小自动分配相应的内存空间以适应该字符串所存储的内容。

– Str5在初始化过程中,Arduino将明确的分配固定的内存空间给该字符串。这个内存空间大小在整个程序运行中是不会因为Str5中的内容改变而改变。

– Str6初始化数组时预留额外的内存空间以存储较大的字符串

终止符

一般来说,字符串的结尾有一个空终止符(即ASCII代码0)。此功能可让诸如Serial.print()的函数知道字符串在何处结束。否则,Arduino将会不停的从内存中继续读取字符串后面的数据,而这些数据是不属于该字符串的冗余数据。
字符串也会因为这些冗余内容而占用更多的字符空间。

因此以上示例程序中:

Str2和Str5都需要八个字符,七个字符用于存储“Arduino”,第八个字符用于存储终止符。

str4将自动调整为八个字符,这八个字符中包含一个终止符。

Str3明确地包含了终止符。

需要注意的是,字符串可能不包含终止符,例如以上程序中Str2已定义了字符长度为7,而不是8。这样做会打断使用字符串的函数,所以不要故意在声明字符串时使用这种方法限定字符串长度。

单引号?还是双引号?

定义字符串时应使用双引号(例如“ABC”),而定义一个单独的字符时应使用单引号(例如’A’)

处理长字符串

你可以像处理长字符串:

char myString[] = "这是字符串信息的第一行"
" 这是字符串信息第二行"
" 等等等...";

字符串数组

假如你所开发的项目中包含大量文字(如开发一个带有液晶显示屏的项目),这时候建立一个字符串数组是非常有利的。因为字符串本身就是一个二维数组。

在下面的代码中,字符数据类型char后跟了一个星号’*’。这表示该数组是“指针”数组。所有的数组名实际上都是指针,因此我们需要建立一个针对数组的数组。指针对于C语言初学者而言是非常深奥的部分之一,但掌握指针的应用对于程序优化和编写是非常有帮助的。