在Arduino及C++程序中,通常有兩種定義字符串的方式: char數(shù)組 和 String類。
char數(shù)組
char數(shù)組是字符元素組成的數(shù)組,是最基本最常見的字符串定義方式。其定義方式如下:
char a[] = "arduino";
需要注意的是,字符串末尾都有一個(gè)不可見的結(jié)束符 \0
。因此這個(gè)字符串雖然有7個(gè)字符,但其長(zhǎng)度為8字節(jié)。可以使用以下代碼進(jìn)行測(cè)試:
char a[] = "arduino";
Serial.print("strlen: ");
Serial.println( strlen(a) );
Serial.print("sizeof: ");
Serial.println( sizeof(a) );
strlen可以測(cè)量字符串的長(zhǎng)度,sizeof可以返回變量占用的內(nèi)存大小。
可以看到,兩者輸出的結(jié)果是不一樣的,正是由于char數(shù)組有\0
結(jié)束符造成的。
因此這個(gè)字符串也可以寫作:
char a[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
但是如果寫作:
char a[7] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
則該變量只是一個(gè)char數(shù)組,由于沒有結(jié)束符,其不能被正確的識(shí)別成字符串,在實(shí)際運(yùn)行中如果作為字符串調(diào)用,將導(dǎo)致程序出錯(cuò)。
String類型
char數(shù)組是C語言中提供的字符串定義方式,在C++中更常使用的方式是String類型。其定義方式如下:
String a = "arduino";
String類型除了能存儲(chǔ)字符串?dāng)?shù)據(jù)本身,還提供多種成員函數(shù),可以完成一些常用的字符串操作。
兩者區(qū)別 及 如何選擇
char數(shù)組是C語言中提供的字符串定義方式,在C++中更常使用的方式是String類型,String是現(xiàn)今大多數(shù)編程語言中都有一種數(shù)據(jù)類型,兩者在實(shí)際使用中差別較大,這里例舉一些常用操作方法:
char s[] = "Arduino";
String s2 = "Arduino";
// 獲取字符串長(zhǎng)度
int length = strlen(s);
int length2 = s2.length();
// 截取子字符串
char substr[];
strncpy(substr, a + 4, 3)
String substr2 = s2.substring(4, 6);
// 合并字符串
char str[] = strcat("i love ", s);
String str2 = "i love " + s2
// 將字符串轉(zhuǎn)換為數(shù)值
String n="123.12";
long number = n.toInt();
float fnumber = n.toFloat();
char n2[]="123.12";
long number2 = atoi(n2);
float fnumber2 = atof(n2);
更多字符串操作方法,可見本書官網(wǎng):https://clz.me/arduino-book/more/
簡(jiǎn)單說:
- 使用char數(shù)組的方式雖然較為復(fù)雜,但可以更節(jié)省存儲(chǔ)空間;
- 在C++環(huán)境下,大部分情況推薦使用String類型的字符串;
- String中提供了很多字符串操作方法并且支持操作符,因此在一些情況下使用String類型相對(duì)char數(shù)組更簡(jiǎn)單一些。
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭(zhēng)議評(píng)論。
參與本評(píng)論即表明您已經(jīng)閱讀并接受
上述條款。