’\0到底寫不寫
阿新 • • 發佈:2018-12-08
字元陣列 ‘\0’加不加
‘\0’ 是空字元對應得ASCII是000即null,什麼也不做, 不是ASCII對應032空格
組賦值方式 | 加‘\0’方式 | sizeof | strlen | |
---|---|---|---|---|
多個單個字元賦值 | 指定大小 | 1.長度<字元個數 報錯 2.長度>字元個數 其餘補’\0’ 3.長度=字元個數 不加’\0’ | 指定的陣列長度 | 遇第一個’\0’之前(不包括’\0’) |
未指定大小 | 不加‘\0’ | 賦值的陣列長度 | 遇第一個’\0’之前(不包括’\0’) | |
字串常量賦值 | 指定大小 | 1.長度<字元個數+1 報錯 2.長度>字元個數+1 字元其餘補’\0’ | 指定的陣列長度 | 遇第一個’\0’之前(不包括’\0’) |
未指定大小 | 對於一個字串常量,系統會自動在所有字元後面+‘\0’作為結束,再把它儲存在字元陣列中 | 賦值的陣列長度+1 | 遇第一個’\0’之前(不包括’\0’) |
注:
- char a1[]={‘a’,‘b’,‘c’,‘d’}; 這是多個單字元賦值
- char a[]=“abcd”;這是字串賦值;
- 對於一個字串常量,系統會自動在所有字元後面+‘\0’作為結束,再把它儲存在字元陣列中
- 其實對於單個字元賦值,長度=字元個數的時候與為指定大小同樣的意思
- 由第三條可知,長度=賦值字元個數+1,char a[4]=“abcd”; 所以這樣會報錯 長度短了
#include <iostream> using namespace std; int main() { char a[]="abcd"; char a1[]={'a','b','c','d'}; cout<<sizeof(a)<<" "<<strlen(a)<<endl; cout<<sizeof(a1)<<" "<<strlen(a1)<<endl; }
擴充套件:
對於string型別(參考譚浩強C++程式設計)
1.是C++已經宣告的一個類,在類中的資料成員包含字元指標變數,在其中不是直接存放字串本身,而是放字串的起始地址。字串變數代表該類的物件的起始地址
2.每一個元素只包含字串本身的字元而不包括‘\0’