定義字元陣列的時候需要注意的地方

2022-02-23 15:45:36 字數 839 閱讀 1126

對於字元陣列而言

char string[10];

當寫下上面的**的時候,一定要明白它的內涵。

10意思是這個陣列有10個元素,即10個記憶體單元。

這10個記憶體單元是string[0]~string[9],0到9共10個數並沒有string[10],string的定義域在0到9之間的整數,10不在定義域範圍之內。

string[9]這個記憶體單元通常被被設定為『\0』來表達陣列的結束標誌,也就是這個記憶體單元不用來存放使用者資料。

那麼能用來存放使用者資料的記憶體單元就是string[0]~string[8]共9個記憶體單元。

我們一開始是定義了10個記憶體單元,本意是希望用來存放10個使用者資料,但實際上我們只能存放9個使用者資料。

少了乙個怎麼辦?很簡單,只需要加上一即可。

char string[11];

這才是定義了能存放10個使用者資料的陣列。

經常在**中能看到類似下面的**

#define num 10;

char[num+1];

或者char[max_path+1]

都是同樣的道理

總結一下,如果你希望你的陣列能存放n個使用者資料,那麼定義陣列的時候就需要定義成char[n+1].

上面那個問題確實很繁瑣,怎麼避免呢?

char name="123";

可以通過這種方式來對字元陣列初始化,和char name[4]="123";是等價的。

為什麼字元陣列最後乙個字元必須是\0呢,因為有個strlen函式會檢測這個標誌,如果沒有\0,這個函式就沒法正確的執行。

而除了整型陣列之外的陣列就不用擔心\0的問題,唯一需要注意的就是迴圈的時候注意陣列越界的問題。

AsynckTask幾點需要注意的幾個地方

問題一 asynctask是多執行緒麼?是的 問題二 asynctask與handler相比,誰更輕量級?通過原始碼可以發現asynctask實際上就是乙個執行緒池,而網上的說法是asynctask比handler更輕量級,顯然這是不準確的說法,只能這樣說,ansytask在 上比handler要輕...

關於Map Set list集合需要注意的地方

一 非空判斷 如果object為null,則設定為defaultvalue objectutils.defaultifnull object,defaultvalue 判斷集合是否為null listlist new arraylist system.out.println list.isempty...

企業在建站的時候需要注意的

在建站前,首先我們要做的就是確定 的作用定位,只有了解了 的作用定位,才能更合理地建設 比如你希望建立什麼型別的 的主要作用等。企業 的功能分為形象展示 內部網路管理 電子商務三大模組。設計好首頁排版和形象 的首頁是 主題內容和形象的結合,是給瀏覽者第一印象的關鍵點。所以我們要合理設計好 的首頁,考...