c語言關於陣列元素個數和字串長度的問題

2022-02-17 02:47:00 字數 3446 閱讀 6092

1樓:匿名使用者

給你介紹幾點個人淺薄認識吧:

s[20]中20是主要用來申請空間的,表示該字串陣列要20*sizeof(char)空間

char s[20]="beijing"表示用字串beijing來初始化該字元陣列

對於字串預設後面是跟有\0來表示字串的結束,但是不算入字串長度中

所以你這裡strlen(s)=7 陣列個數為7

p所指字串長度為6 =》 這個個人也不理解,我認為應該也是7,因為它指向的是s的首地址

如果是s[ ]沒有20 答案一樣嗎

對你的問題陣列個數 p所指字串長度應該一樣

不一樣在於,它預設申請的空間也就是字串的長度,所以如果你後面有操作

s[10]='a'類似的有20是正確的,沒有20就訪問越界了

如果是』b『'e'i'j'i'n'g'是這樣子答案有變化嗎

不知道你是指怎麼賦值

如果是按照s[0]='b';s[1]='e';…… 如果不加上s[7]='\0'的話結果很難說,肯定是有變化的,7之後的記憶體會訪問原來存在的資料。這就要看s[20]是否開始初始化了

2樓:匿名使用者

佔據的記憶體跟你資料型別有關,比如你定義一個int陣列,有10個元素,那佔據的記憶體就是10*sizeof(int)。

3樓:匿名使用者

字串長度是7,\0佔據空間但是不算長度。

s沒有20答案一樣,p所指字串長度也是7。

如果是』b『'e'i'j'i'n'g'這個樣子長度就不確定了,因為沒有\0作為結束符,字串是以\0為結束標誌,找不到\0會越界訪問,結果未知。

陣列資料個數=陣列長度;

佔據記憶體=sizeof(陣列元素型別)*陣列長度;

上面那個陣列長度為20。

4樓:匿名使用者

char s[20]:分配20個char空間,"beijing」字串含有『\0』作結束的的字元共有8個char,賦值時,依次從0-7拷貝,陣列空間不夠時會溢位。

字串有效長度是不含結束符'\0'的所有字元,strlen函式統計字元陣列有效長度時,是按第一個遇到的'\0'計算的。

就上面的問題:s陣列有20 char空間,即長度20,字串長度為7,字串共有字元8個。

如果beijing按字元依次賦值,由於沒有結束符『\0』,此時s陣列有20 char空間即長度20,存有字元7個,沒有結束符『\0』

strlen 由於函式沒法使用。

不能整體輸出字串了,只能用迴圈依次輸出,或強制在結尾處加上結束符再整體輸出。

5樓:

字串長度是不包括\0的

c語言中關於字元陣列的長度問題

6樓:匿名使用者

這。。。

我的結果是15 3

因為字串p沒有結尾符\0

因此結果不定,和原來的儲存的資料有關

如圖,是除錯結果,可以看到,p後面是亂碼

7樓:匿名使用者

前兩個明顯是3、3

因為 strlen 求的是字串長度,遇到 '\0',就結束,字串 "abc" 的長度就是3

後兩個都沒有賦值 '\0' ,因此不確定長度,可以是比3大的任何數

8樓:匿名使用者

我在 linux下列印為 6, 3;

在因為在 p 的最後沒有加上 '\0', 所以 strlen(p)時會把 q中的字元也算上.

你試著把 q中的 a,b,c 改為 d,e,f , 然後再 printf(p), 此時列印就為 abcdef.

把 char p=, q[10]=; 即可.

或者不要那麼費力,直接寫為

char p = "abc" ; // 它會在後面加 '\0'; 此時sizeof(p) 為 4 ;

char q[10] ="def" ;

結果就是你想要的.

9樓:匿名使用者

,r=,改成r= 就能輸出正確結果啦 當沒給陣列賦值大小時,應該在字元結束處加一個'\0',否則編譯器隨機分配記憶體

10樓:匿名使用者

p[10]是有10個字元的陣列,

"abc"就是一個字串,長度為三個字元。所以strlen(p)=3s是不固定長度的陣列,「abc」這個字串雖然只是陣列的一個長度,但佔據三個字元的空間

是陣列的三個值,陣列長度為3,但總字元數是3q[10]固定陣列長度所以三個值儲存時每個字元佔據一個位r不固定長度所以每個值佔據兩個位,最後還要關閉一個位,所以就是7

11樓:匿名使用者

strlen用來計算字串的,直到碰到第一個字串結束符'\0'為止,在你的陣列p中,你沒有給定陣列長度,由於有3個字元,所以實際長度為3,但是由於沒有'\0'結束,所以根據strlen的工作原理,你還是得不出它的實際長度,所以出現了未定義的結果。你可以用sizeof操作符。而q陣列的長度為10,但是隻存入了3個值,其它的元素都是\0,因此用strlen可以計算出它的實際長度。

如果你將p找長度設為4,你會發現可以得出正確的結果!

12樓:匿名使用者

不對吧,最後一個會報錯的,strlen(r),r根本沒有『\0'結束符

c語言中將字串賦值給字元陣列的問題

13樓:

#include

int main()

14樓:豬頭或火寶寶

你好!!!

舉例如下:

char s[20];s="helo";這樣是錯誤的,原因就是不能用賦值語句將一個字串常量直接給一個字元陣列賦值。

char s[20];

char ss="hello";

s=ss;這也是錯誤的,原因是不能用賦值語句將一個字元陣列直接給一個字元陣列賦值

即字串的複製(c語言中,但是在c++的string 類,上面的賦值是正確的)必須用strcpy()函式實現。

而char a[ ]=」toyou「;為上面是正確呢???那是因為我們在宣告陣列變數的時候就是,為其開闢空間,併為其初始化,這樣才是符合c語言語法的。而上面的都是不符合語法的。

c語言裡面要定義一個字串陣列,陣列元素個數不確定,每個元素的長度也不確定,求動態定義的方法

15樓:匿名使用者

你可以用動態分配記憶體的方法,

比如你要建立一個字串陣列:

char *str;

str=(char *)malloc(n);

n是變數,可以在確定了變數的值後再用以上**分配記憶體,而str字串可以以一般陣列的用法使用,比如*str="hello";的話

str[1]='l';

最後別忘了釋放記憶體

free(str);

c語言字串陣列的問題C語言字串陣列的問題

include int main scanf s a for i 0 a i 0 i for j 0 j 5 j 修改 1 下標從0 4,共5個 return 0 每行結尾的 僅僅是為了連線字串使用的,如果一個字串過長,寫在一行比較不合適,就在該行結尾處加上一個反斜槓 就可以在下邊的行繼續寫這個字串...

關於C語言字串操作

對的。字串結束符 0始終是字串的一部分,這是編譯器加上去的,是為了標記字串何時結束。str s 不能這樣判斷,前者的值是地址值,即常量指標,後者的值是 s 的ascll碼,根本不能比較。改為這樣比較一個字元的字元倒可,如下 str s 注意陣列名是它的首元素地址的常量指標。如你上面所寫的即可。在定義...

C語言 用字元陣列從鍵盤輸入字串,刪除字串中所有

1 遍歷字串 2 對每個字元 判斷,如果不是字母,則刪除。刪除可以通過後續字元前專移,覆蓋要刪 屬除字元的方式實現。如下 int main s j 0 printf s n s include include include int main str2 j 0 printf s str2 getch...