字元陣列初始化

2021-09-08 08:51:54 字數 1573 閱讀 1274

上週實習做fcitx輸入法時碰到乙個字元陣列的問題,因基礎的不紮實,導致經除錯了幾分鐘才發現問題所在。

字元陣列初始化常見有兩種格式:

char arr_test[10] =;

char arr_test[11] = "

helloworld

";

為什麼是一樣的內容,兩個陣列的長度不一樣,乙個是10,乙個是11,因為預設在第二個陣列後面加上了字串結束符'\0'。此時,要對這兩個陣列分別利用strlen(arr_test)來求長度,答案會是多少呢?

第乙個陣列利用strlen(arr_test)來求,長度是不定的,為什麼?因為strlen沒有碰到'\0',不知道何時結束。

第二個陣列利用strlen(arr_test)來求,長度是10,為什麼?看下我以前的文章《c/c++之sizeof與strlen的區別》。

測試程式:

測試程式1:

#include using

namespace

std;

intmain()

; cout

<<"

strlen(arr_test)=

"cout

<<"

sizeof(arr_test)=

"

}

輸出結果:

strlen(arr_test)= 15

sizeof(arr_test)= 10

測試程式2:

#include using

namespace

std;

intmain()

輸出結果:

編譯通不過,error c2117: 'helloworld' : array bounds overflow

測試3:

#include using

namespace

std;

intmain()

輸出結果:

strlen(arr_test)= 10

sizeof(arr_test)= 11

測試4:

#include using

namespace

std;

intmain()

; cout

<<"

strlen(arr_test)=

"cout

<<"

sizeof(arr_test)=

"

}

輸出結果:

strlen(arr_test)= 10

sizeof(arr_test)= 11

這裡再提下sizeof和strlen:

sizeof求的是位元組數,注意int在32位機下佔4個位元組。

strlen所作的僅僅是乙個計數器的工作,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃瞄,直到碰到第乙個字串結束符'\0'為止,然後返回計數器值。

字元陣列的初始化

有關字元陣列的初始化的若干問題 一 注意事項 1.字元陣列的初始化,初始化時賦予的自然是字元 要加單引號 2.賦予字元也可以通過賦予相應字元的ascii碼 去掉單引號 或賦予字串 只加雙引號 來進行。3.對字元陣列完全不進行初始化,則各元素隨機。4.對字元陣列進行不完全初始化,則從低位址 a i 中...

陣列初始化

cpp中陣列初始化方法 簡單的初始化 利用定義變數時賦初值進行初始化。int a 10 float f 10 char ch 5 大括號中的為初始值。較為複雜的初始化 利用memset函式初始化。memset函式用法 void memset void s,int c,size t n 將已開闢記憶體...

陣列初始化

flydream flydream c cat x.cpp include using namespace std int main int argc,char argv flydream flydream c flydream flydream c g g wall x.cpp x.cpp in ...