用户工具

站点工具


reference:language:string

string(字符串)

描述

文本字符串可以有两种表现形式。你可以使用字符串数据类型,或者你可以做一个字符串,由char类型的数组和空终止字符('\0')构成。而字符串对象(String object)将让你拥有更多的功能,同时也消耗更多的内存资源,关于它的详细信息,请参阅页面(String object)

举例

以下所有字符串都是有效的声明。

  char Str1[15];
  char Str2[8] = {'o', 'c', 'r', 'o', 'b', 'o', 't'};
  char Str3[8] = {'o', 'c', 'r', 'o', 'b', 'o', 't', '\0'};
  char Str4[ ] = "ocrobot";
  char Str5[8] = "ocrobot";
  char Str6[15] = "ocrobot";

声明字符串的解释

  • 在Str1中 声明一个没有初始化的字符数组
  • 在Str2中 声明一个字符数组(包括一个附加字符),编译器会自动添加所需的空字符
  • 在Str3中 明确加入空字符
  • 在Str4中 用引号分隔初始化的字符串常数,编译器将调整数组的大小,以适应字符串常量和终止空字符
  • 在Str5中 初始化一个包括明确的尺寸和字符串常量的数组
  • 在Str6中 初始化数组,预留额外的空间用于一个较大的字符串

空终止字符

一般来说,字符串的结尾有一个空终止字符(ASCII代码0)。以此让功能函数(例如Serial.pring())知道一个字符串的结束。否则,他们将从内存继续读取后续字节,而这些并不属于所需字符串的一部分。

这意味着,你的字符串比你想要的文字包含更多的个字符空间。这就是为什么Str2和Str5需要八个字符,即使“ocrobot”只有七个字符 - 最后一个位置会自动填充空字符。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);
  }
}
reference/language/string.txt · 最后更改: 2017/04/07 10:03 (外部编辑)