字元陣列賦初值後會自動在末尾加 0嗎

2025-07-16 06:15:23 字數 5805 閱讀 4586

1樓:法律達人

因為這個字串需要佔用6個字元位置。 所謂自動加'\0'的問題是:你寫在雙引號中的,編譯程式會認為是字元。

2樓:網友

字元陣列賦值後會自動在末尾加\0, 所以定義陣列最小長度長度需要比賦值長度大一。

例如: char name[4]= "tom";

3樓:網友

呵呵,要看你**實際怎麼寫的。例如:

char a = "success!"; //這句後面就有'\0';

char a = ; //這句後面就不會有'\0'

4樓:碧海_輕風

字元陣列不會有結尾標誌,字串型會預設補上。

5樓:網友

若是char a[10] = "hello"這樣定義的話,那麼會自動加『\0』的。

6樓:網友

字串後面會自動加\0。

關於c語言字元陣列的賦值最後自動新增『\0』問題

7樓:

#include

void main()

printf("%s",c);

c[0]='a'; // 僅對bai第一位元du素賦zhi值,它並不影響dao

其後面的版字元權。

printf("%s",c);

c[1]='b'; // 同理。

printf("%s",c);}

8樓:w天使de翅膀

可以正常讀出來的,\0只是乙個相當於識別符號的東西,用來判斷已經到達字串的末尾。

9樓:網友

c[5]只有5個空間無法完全容納字串"hello",因為這個字串需要佔用6個字元位置。

所謂自動加'\0'的問題是內:你寫在雙。

容引號中的,編譯程式會認為是字串,會自動為你新增上乙個字串結尾符號0,而不是執行時新增的。

如果你用debug方式執行程式,除錯環境自動會把你開設的char a[5];進行初始化0的工作,這時你再將第1位初始化時,後面的0仍存在就好象字串結尾已經存在了。如果非debug執行則沒有這個初始化工作。

如果你用字元方式初始化應當寫:char c[6]=;

10樓:網友

char c[5] = ; 有兩個問題。

1)語法不對,應該是 char c[5]="hello"

2)有錯誤, char c[5]="hello",字串終止符溢位了。

2. 但是我如果定義char a[5];給前一回位賦初值,答。

則第二到第五位會自動賦值'\0'

沒錯,但注意是陣列第1到第4項自動賦值為0但後面我又給第三位到第五位賦值了,這個陣列是不是就不能正常讀出了// 需要看你賦什麼值,如果是非零值、並且你把陣列a當字串使用,則結果無法預料(無法確定終止符);如果你把陣列a只是當陣列使用,則不會有讀取問題。

11樓:阿炳仰

可以正常讀出 就是隻能讀出 第一位。

scanf以%s形式對字元陣列賦初值的時候,到底要不要自動在末尾加 '\0' ?

12樓:網友

讀到空白字元或者檔案尾終止輸入,並且在字元陣列後加上'\0'

13樓:網友

不用,系統會自動加0的,但是要注意輸入不能超過字元陣列的長度範圍。

char p[]={'a','b','c'},q[10]={'a','b','c'}這樣的賦初值會不會末尾自動加『\0』呢?

14樓:網友

當然不會了。自動加0的,是字串,不是字元陣列。比如char p="abc";,會在末尾自動加0,因為"abc"是字串。

而char p=;是字元陣列,其性質與int n=;無異。

之所以會出現這種情況,原因很簡單,這是因為對於任何乙個陣列,如何只是初始化的部分元素,那麼其他部分的元素都會預設的初始化為0,這也就是為什麼int q[10]=;會返回3的原因,因為它的第4-10個元素都預設地被初始化為0。

至於char p=;,因為你沒有指定陣列p的長度,所以編譯器會為這個元素開闢了三個元素的空間,即三個位元組,但實際上會因為記憶體對齊的原因,編譯器實際上是分配了四個位元組的空間,其中用於對齊的那個多餘的位元組的值是不確定的。當strlen(p)的時候,strlen會越p的界,一直讀取q的第四個元素,也就是q的0才會返回,所以是7。

15樓:unkown欣

剛開始學c的時候,都會出現類似這種茫然的狀況!

在定義字元和字串這塊,只要記住乙個原則就行了,字元陣列末尾不自動加\0,只有定義字串的時候,系統才自動加!

16樓:小海鬼

瞭解了希望真誠到永遠能說更詳細點。

17樓:網友

當然不會了啊~ 看看你用的什麼編譯器吧~是否和書上的一樣。

c語言用字串給字元陣列賦初值時要不要計算末尾的結束標誌『\』?

18樓:聽不清啊

char c="ok",我硬要在方括號中填入乙個數,該填3。

char c[2]="ok";依然可以正確輸出ok一詞,並未報錯---這與具體所使用的編譯器有關,有的編譯器不作陣列越界檢查,全憑程式設計師自己掌控。但這是不安全的。有時會造成不可控的結果。

19樓:劇佛

正常情況下應該會報錯的error c2117: 'ok' : array bounds overflow(陣列上溢)

如果沒有報錯,那朋友,這樣很危險的,以後別這樣。

你只定義字元陣列長度為2,但是實際字元為"ok\0",也就是3個字元,最後的字元'\0'仍然存在系統中,只不過不在陣列c中。這樣以後系統再為別的陣列分配空間的時候,有可能將含有字元'\0'的空間分配給新的陣列,這樣對於新的陣列將是乙個潛在的威脅。

養成良好的程式設計習慣,以後不要這樣,直接不加字元長度都行,系統會自動在字串最後新增結束標誌。

20樓:雪寫江山

char c[2]裡有兩個元素,o和k你這樣輸出c[0]和c[1]肯定可以的,c中多定義乙個位置放置'\0'也是為了操作方便。像迴圈就可以通過這個來判斷。

21樓:網友

不需要。不過 要留乙個給它,系統會自動附加。

22樓:寇恩毓稷

1.字元陣列可能沒有尾0,不能直接當字串用;

2.尾0要佔用陣列的乙個單元,所以,陣列必須有多餘的單元;

3.如果沒有多餘的單元,就要重新產生乙個較大一點的陣列;

4.在字元陣列有效字元後,加乙個尾0

即'\0\,就成了字串;

c語言字元陣列不賦初值是預設為'\0'還是隨機值

23樓:小夏聊生活

普通陣列沒有賦初值,預設的陣列元素值是隨機數,不是0。

如果在定義陣列時,資料型別前面加上關鍵字static,陣列變成了靜態陣列;或者把陣列定義在函式的外面,成為全域性變數陣列,這時陣列元素的值自動賦值為0。

例子:#includeint main(void)int m = 0;

static int n;

int a = 5, b = 6, c = 7, d = 8;

int k = m = a>b) &n = c>d))printf("k = d, m = d, n = d", k, m, n);

return 0;

輸出結果為:k = 0, m = 0, n = 0;

當變數用static修飾,但是沒有賦初始值的時候,編譯器會自動給它賦值為0.但是如果不用static 只是 int n;這樣定義的話,這個值就是未知的,因為編譯器會給這個變數分配一塊4位元組的位址空間,這個位址裡面的值就是n的值。

24樓:網友

那要看你指的不賦初值是哪種。

如果是char a[10];

那這10個元素都是隨機的。

如果是char a[10] =

那除了賦值的3個元素, 其他都是0

25樓:網友

放在main函式里,預設初值隨機數。

放在main函式外,預設初值為0.

26樓:網友

如果你想測試它是不是隨機的。

用這一段**:

#include

#include

int main(void)

這樣你就會看到arr裡面充滿了垃圾值。

或者用下面的**:

#include

#include

int main(void)

27樓:葉掣樊夏煙

應該是隨機值,你可以做個陣列輸出,別在編譯器執行,看一下結果;

28樓:網友

我記得是隨機值。你可以自己上機試下呀。

定義乙個陣列,unsigned char str[20],會預設自動新增結束符'\0'嗎,

29樓:網友

c語言中的字串,應該說是指字串常量,如:"hello", "how are u"等,這些常量字串本身在末尾存有乙個\0,因\0是不可見字元,所以,看不到。

可以把字串儲存到乙個字元陣列中,儲存方法分為三種:

1、定義字元陣列,用常量字串進行初始化。

char str1[10]="hello"; //sizeof(str1)=10

char str2="how are u" ; //未指定陣列大小,按初始化字串實際大小開闢陣列空間,sizeof(str2)=10 ; 9個字元+1個\0 通過此方法,可以驗證常量字串中含有\0

2、定義字元陣列,不初始化,採用字串賦值操作函式進行賦值。

char str[100];

strcpy( str, "hello"); //字串拷貝。

sprintf(str, "%s world", "hello"); //格式化輸入,得到hello world

以上函式會自動在字串尾賦值字串結束符。

3、定義字元陣列,不初始化,採用迴圈,逐位賦值字元,並在結束位置賦值\0

char str1[10];

char str2="hello" ;

int i,j;

for(i=0,j=0;str2[i]!='\0';i++ //遍歷字串str2

if ( i%2 ) //只取偶數位。

str1[j++]=str2[i];

str1[j]='\0'; //手動賦值結束符。

scanf接受鍵盤輸入字串後末尾是否自動加'\0?'

30樓:匿名使用者

是的,自動就加上了。

#include ""

int main(void)

自動就加上了,不用擔心。

31樓:來乙份頭上的漁夫帽

scanf("",&a)前樓scanf的位址格式錯了。

c語言:字元型陣列在後面會自動加\0佔乙個位元組,為什麼圖中的列數為7?應該為0才能放的下吧?

32樓:風若遠去何人留

第三個元素,"ijklwdd"

這個確實是8個元素,包括\0.

不過開的陣列只有一行7個,所以最後乙個\0放不下,被忽略了。

如果%s輸出a[2]會把ijklwdd和mnopz一起輸出。

C字元陣列和字串陣列,在C中字元陣列和字串有什麼區別

實際上,字元陣列和普通陣列一樣,沒有本質區別。請大家注意陣列型別的含義 資料型別指的是陣列所包含的元素的型別,而不是陣列名的型別,陣列名永遠是乙個指標,指向第乙個元素的位址,即陣列首位址。字元陣列的每個元素都是char型別,整型陣列的每個元素都是int型別。scanf 和 printf 函式有一種格...

關於字元陣列的賦值問題!字元陣列賦值問題

22,選a 理由 字串是以 0 結束的,所以加上 good 就是6個位元組,而陣列的大小才是5,所以空間不夠,大小至少為6,改為 char str 6 good 或者。char str good 都可以,後者根據字串的字元個數自動匹配陣列大小。34,選c 理由 同17題。3,選a 理由 同17題。哥...

c語言字串陣列逆序問題,C語言字串陣列逆序問題

第乙個問題 字串陣列的長度不包括最後的 0 第二處問題 1 把 for i 0 str1 i 0 i 後面加上乙個分號 2 把for i 0 str1 i 0 i 後面的花括號去掉 3 再把 puts str1 前面的花括號去掉就可以了 程式如下 include stdio.h int main c...