C 關於char陣列的問題,關於C char型別陣列長度的問題

時間 2021-06-25 14:43:59

1樓:

①可為什麼下標引用超出定義沒有錯誤

因為宣告char陣列的時候,b只是被宣告為指向char陣列第一個地址的指標。用操作符取資料的時候,編譯器看成是首地址向後偏移 (char型別的長度 * 序號),超過了界限之後,至於後邊取到什麼意外資料就不一定了。所以一般需要使用char陣列儲存一個長度為n的字串的時候都宣告n+1長度,然後,操作完後把b[1]='\0'。

如:char dog[4] = ;

char wolf[4] = "ply";//引號括起來的字串隱藏帶'\0'

②果把下面for部分取消註釋執行結果又只能輸出一個d,這裡又是怎麼回事

for(i=0;i<=(sizeof(b)/sizeof(b[0])-1);i++);

看到沒,你在括號後邊多加了個分號,執行完i就=3了,然後就輸出b[3]了。。。

③不帶宣告陣列大小

char b=;

另外關於字元陣列:

sizeof(陣列)計算的是整個陣列的長度。而strlen()計算的是陣列中可見字串的長度。

char表示的字串是c風格的字串,後面都要有'\0',否則不是字串;引號括起來的字串隱藏帶'\0':

初始化時陣列長度不設時,編譯器會根據內容計算元素個數:int myarray =

陣列只有初始化時可以用“=”,其它時候均不可以給陣列直接賦值。

還有什麼。。。可以用cin.get(char, num)來輸入。。還有一時想不起來了。。。

關於c++char型別陣列長度的問題

2樓:匿名使用者

strlen其實輸出的陣列中儲存的字串的長度,而不是陣列的長度

3樓:愛你的我_義

首先,這樣程式設計是有風險的,因為你定義的陣列沒有進行初始化,也就是說 你陣列中可以是任何資料,可能是字母,可能是數字,都不確定,放到實際工程專案中,容易造成記憶體洩漏或溢位.

其次,strlen獲取的是字串長度其中不包括結束符/0 所以,第一個輸出9說明這時陣列中剛好有9個元素.

如果你初始化陣列為0後,列印應該是11,因為陣列是從0算起的.

4樓:

只宣告並未初始化,記憶體中的資料未可知。用vs2010第一個輸出我的是20.

5樓:匿名使用者

s開始沒有賦值,列印出任何值都是可能的

s = ; 這個能編譯過麼?vc6下直接編譯不過

c,c++中關於char* 以及 char陣列的問題

6樓:veket的小號

1.因為 iostream內部 cin cout 對char* 做了特殊處理.......因為c/c++ 輸入輸出字串通常要用到char*

如果直接輸出地址,就要用別的方法來輸出字串了 就不方便了.....所以直接輸出地址 那裡放著的字串......

3、sizeof("hello");得到 字串實際長度 + \0 佔的一個位元組

一般用strlen函式.......

同 1、2,str陣列名 是 char* 地址

7樓:愛問西瓜愛答樹

pstr是指標,*pstr,取地址的內容。顯示什麼,這個取決於cout用哪個函式,由引數型別決定。想輸出字串的地址用char str2="123abc";

2.arr是陣列,是首地址。int * ,表示指向的地址空間是int 4位元組的,char *當然是char 1位元組的。

3.sizeof("hello");

4.cout有個對字串輸出的過載,全部輸出,遇到'\0'結束。

8樓:匿名使用者

運算子過載可以做任何事情,沒有任何規則所只要是地址列印出就是地址。而且char*是特殊的,從來沒有在哪輸出過地址

運算子過載,不是int/char不同,而是過載後int*和char*不同

sizeof("hello"),這是唯一的辦法,賦值給指標後只能用strlen,不能用sizeof

同樣,不要總想著引數是地址,輸出也是地址,如果這樣,高階語言就太無用了

9樓:

1、這是cout(const char *)函式的定義。為方便處理字串。

2、字串是陣列,int只是一個數;

3、include

4、同1.

c 指標陣列問題,C 中關於指標陣列的問題。

是錯誤的。char cchar count 宣告瞭cchar是有count個元素的陣列,每個元素都是指向char型變數的指標。但cin cchar i 卻試圖給cchar的第二個元素 指標 賦一個鍵盤值 這裡指標還沒有確定指向,是隨機的,它隨機地指向了不能寫入的地方,就要出錯。這裡應該先給指標陣列賦...

C語言中關於二維陣列的問題,c語言關於定義二維陣列的問題

巢琨瑜 float a 5 是定義了一個指向陣列的指標,如果要把它當成二維陣列的話,相當於列數為5,行數可以動態分配。如 float a 5 int n 2 定義行數為2 a new float n 5 int sum 0 for int i 0 i 對於你定義的這個陣列,它表示有5個float 型...

關於C語言定義二維陣列的問題,c語言關於定義二維陣列的問題

以下能正確定義二維陣列的是 以下能正確定義 陣列的是 去掉二維兩字 a int a 3 語法錯,沒帶初始化,不允許用 空白 不允許 陣列大小不定。b int a 正確定義了陣列,是一維陣列,陣列元素只有1 個,初始化數值為 2 3 就是 6。c int a 3 語法錯,花括號裡沒填初始化數值。d i...