1. 程式人生 > >’\0到底寫不寫

’\0到底寫不寫

字元陣列 ‘\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’)

注:

  1. char a1[]={‘a’,‘b’,‘c’,‘d’}; 這是多個單字元賦值
  2. char a[]=“abcd”;這是字串賦值;
  3. 對於一個字串常量,系統會自動在所有字元後面+‘\0’作為結束,再把它儲存在字元陣列中
  4. 其實對於單個字元賦值,長度=字元個數的時候與為指定大小同樣的意思
  5. 由第三條可知,長度=賦值字元個數+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’