请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
搜索
查看: 486|回复: 0

[Arduino 语法参考] 字符串

[复制链接]

267

主题

0

回帖

1136

积分

管理员

积分
1136
发表于 2024-3-21 00:39:41 | 显示全部楼层 |阅读模式

字符串

[数据类型]

描述

文本字符串可以通过两种方式表示。你可以使用 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";

字符串声明的可能情况:

  1. 声明一个未初始化的字符数组,如 Str1。
  2. 声明一个字符数组(带有一个额外的字符空间),编译器将添加所需的 null 字符,如 Str2。
  3. 显式添加 null 字符,如 Str3。
  4. 使用双引号中的字符串常量进行初始化;编译器将调整数组大小以适应字符串常量和终止 null 字符,如 Str4。
  5. 使用显式大小和字符串常量初始化数组,如 Str5。
  6. 初始化数组,为更长的字符串留出额外空间,如 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);
  }
}

扩展阅读



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|棱讯科技 ( 粤ICP备2024228160号-2|粤公网安备44030002003510号 )

GMT+8, 2024-11-2 12:39 , Processed in 0.016688 second(s), 3 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表