在C中,并沒(méi)有字符串這個(gè)數(shù)據(jù)類(lèi)型,而是使用字符數(shù)組來(lái)保存字符串的。
C字符串實(shí)際上就是一個(gè)以null('\0')字符結(jié)尾的字符數(shù)組,null字符表示字符串的結(jié)束。需要注意的是:只有以null字符結(jié)尾的字符數(shù)組才是C字符串,否則只是一般的C字符數(shù)組。
C字符串定義時(shí)可以利用等號(hào)(“=”)進(jìn)行初始化,但是以后不能再利用等號(hào)(“=”)對(duì)C字符串進(jìn)行賦值。對(duì)C字符串的操作需要通過(guò)“string.h”頭文件中字義的字符串處理函數(shù)。例如:
//字符串的初始化
char str[11] = "helloworld";
//字符串的賦值
strcpy(str, "hello c");
//獲取字符串的長(zhǎng)度(不包括'\0'在內(nèi))
strlen(str);
//顯示字符串
printf("%s", str);
在C中也可以使用字符指針來(lái)訪問(wèn)一個(gè)字符串,通過(guò)字符指針指向存放字符數(shù)組的首元素地址來(lái)進(jìn)行訪問(wèn)。
char* str = "helloworld";
print("%s", str);
在C++中則把字符串封裝成了一種數(shù)據(jù)類(lèi)型string,可以直接聲明變量并進(jìn)行賦值等字符串操作。以下是C字符串和C++中string的區(qū)別:
|
C字符串 |
string對(duì)象 |
所需的頭文件名稱(chēng) |
string/string.h |
string/string.h |
為什么需要頭文件 |
為了使用字符串函數(shù) |
為了使用string類(lèi) |
如何聲明 |
char name[20]; |
string name; |
如何初始化 |
char name[20] = "zhangsan"; |
string name = "zhangsan"; |
必須聲明字符串長(zhǎng)度嗎? |
是 |
否 |
需要使用一個(gè)null字符作結(jié)尾符號(hào)嗎? |
是 |
否 |
怎樣實(shí)現(xiàn)字符串賦值? |
strcpy(name, "lisi"); |
name = "lisi"; |
其他優(yōu)點(diǎn) |
更快 |
更易于使用,優(yōu)選方案 |
可以賦一個(gè)比現(xiàn)有字符串更長(zhǎng)的字符串嗎? |
不能 |
可以 |