char acstr = "aaaaa";//這個是字元陣列,只含有5個字元
char *pcstr = "aaaaa";//這個是字串,含有6個字元,即5個a加乙個結束符'\0'
輸出的結果 strlen()長度都是5,所以即便是字串,最後取長度的時候,也不考慮\0:strlen()計算字串長度,忽略結束符 \0
char *p = "hello";
char *q = "world";
char o = "hello";
cout<<"hello"char *p = "hello";
char *q = "world"; //比如world實際上存放了6個字元位, 5個字元+'\0'
但是求長度, 返回的值仍然是5: 並不考慮 結束符\0的位
cout<<"hello"<2. 字元陣列是不用存放\0位的,所以分配的字元位數 只要給 strlen(p)就行了, 不需要+1:
a[0] = new char[strlen(p)];
a[1] = new char[strlen(q)];
用字元陣列和字元指標變數都可實現字串的儲存和運算。 但是兩者是有區別的。在使用時應注意以下幾個問題:
1. 字串指標變數本身是乙個變數,用於存放字串的首位址。而字串本身是存放在以該首位址為首的一塊連續的記憶體空間中並以『\0』作為串的結束。字元陣列是由於若干個陣列元素組成的,它可用來存放整個字串。
2. 對字元陣列作初始化賦值,必須採用外部型別或靜態型別,如: static char st=;而對字串指標變數則無此限制,如: char *ps="c language";
3. 對字串指標方式 char *ps="c language";可以寫為: char *ps; ps="c language";而對陣列方式:
static char st=;
不能寫為:
char st[20];st=;
而只能對字元陣列的各元素逐個賦值。
從以上幾點可以看出字串指標變數與字元陣列在使用時的區別,同時也可看出使用指標變數更加方便。前面說過,當乙個指標變數在未取得確定位址前使用是危險的,容易引起錯誤。但是對指標變數直接賦值是可以的。因為c系統對指標變數賦值時要給以確定的位址。因此,
char *ps="c langage";
或者 char *ps;
ps="c language";都是合法的。
c++提供兩種字串的表示方法:c風格的字串和標準c++引入的string類型別。建議使用string類。
1. c風格字串
字串儲存在乙個字元陣列中,一般通過乙個char *型別指標操縱它。然而,系統內部實際上是儲存在乙個字串陣列中,然後,st指向陣列的第乙個元素:
char *st=」hello world」;
常用指標的算術運算來遍歷c風格的字串,每次指標增加1,直到空字元為止:
while(*st++)
當包含:#include
//返回長度
int strlen(const char *);
//比較兩字串是否相等
int strcmp(const char*,const char *);
//以下兩個的使用方式不清楚
//第二個字元拷貝至第乙個
char *strcpy(char *,const char *);
//第二個字元接至第乙個後面
char *strcat(char*,const char *);
c風格字串的長度可以是0,有兩種方式:
char *pc1=0;
char *pc=」」;
乙個測試程式:
#include
// without ".h",eagerly learn to know why
#include
main()
//兩個字串連線成第三個字串
string s1(「hello,」);
string s2(「world!」);
string s3=s1+s2;
//或者,直接加到s1
s1+=s2;
//可以把乙個c風格的字串轉換成string類物件
const char *pc=」a try」;
string s1=pc;//ok
//但,反向的轉換不能自動執行
char *str=s1;//error
為實現這種轉換必須顯示呼叫名為c_str()
//幾乎正確的
char *str=s1.c_str();
但為了防止字元陣列被程式直接處理,c-str()返回的乙個指向常量陣列的指標:const char*,str被定義為非常量指標,所以違例。正確是:
const char *str=s1.c_str();//ok
string 型別支援通過下標操作符號訪問單個字元。
乙個例子:
l const 限定修飾符
for( int index=0;index<512;index++)
第乙個問題是可讀性,即512是什麼意思?第二個問題是可維護性,如多處修改會陷入麻煩。
const int bufsize=512;
for(int index=0;indexconst型別限定符提供了乙個解決方案,把乙個物件(變數)轉換成乙個常量(constant)。在程式中任何改變這個值的企圖都將導致編譯錯誤,因此,被稱為唯讀的。
而且常量定義後必須初始化,因為不能修改。
關於字元陣列和字串陣列
首先看2個東東 char str2 這2個哥們兒長的很像,可實際的涵義確差老了。2個都是c裡面的東東。str1叫字元陣列,首先它是乙個陣列,5個元素但長度為4 加上個 0 其實就相當於 abcd 看看怎麼變過來的 首先變為char str1 abcd 然後把括號去掉就是 char str1 abcd...
關於字元陣列和字串
關於字元陣列和字串 引用 火未燃說 char a 5 和char a 10 有效字元5個,0 表示結束,china共5個字元,但在記憶體佔6個位元組,a 10 佔足五個後遇到 0 結束 結束符 系統會自帶的,不用畫蛇添腳 加上也無所謂 by eviloctal 首先說火未燃關於空字元系統自己加的說法...
C 字串比較
1,str1.equals str2 2,int result string.compare str1,str2 int result string.compare str1,str2 true 忽略大小寫比較 3 在某些語言中,可以利用 來直接比較字串,而在 c 中,只能用 來比較兩個字串是否相等...