c語言字符串數組的初始化,c 字符數組初始化

本文目錄一覽:

C語言初始化字符型數組時,兩種方式的區別?

左圖的程序是a和b初始化時都被賦值為字符串,它們的最後都有字符’\0’,有了這個標誌,求字符串長度和輸出字符串時都能得到正確的結果。

右圖的程序a的初始化賦值仍然是字符串,所以它的輸出也是正確的。而b的初始化使b成為一個“字符數組”,它的最後沒有字符串結束符,系統也不會主動加上。所以,當後面你用字符串操作函數strlen和字符串格式符%s輸出b時,系統會一直往後找,直到找到一個’\0’時,系統便認為,這就是字符串結束的地方,故,輸出的字符串長度和字符串本身都是錯誤的。

b除了所以與a相同的初始化方式,或者應該用下面的語句:

b={‘a’,’b’,’w’,’f’,’\0′};

就能成為字符串了。

c語言的字符串數組初始化問題

你申請數組空間後,內存中存放字符的順序是:

str1[0],str1[1],str1[2],str1[3],str1[4],str2[0],str2[1],str2[2],str2[3]

當輸入字符串是:abc 123時,存儲的數據str1[0]~str1[4],str2[0]~str2[3]為:

‘a’,’b’,’c’,0,xx,’1′,’2′,’3′,0

其中,xx表示一個不關心的任意值,也就是說輸入字符串”abc”需要佔用4個字節的存儲空間

當輸入字符串1為”abcde”時,存儲的數據為:’a’,’b’,’c’,’d’,’e’,0,xx,xx,xx

字符串末尾的0已經超出了str1開設的存儲空間而存放到了str2[0]位置

接着再輸入字符串”1234″時,str2[0]的str1字串的結尾符被字符’1’覆蓋,

存儲的數據為:’a’,’b’,’c’,’d’,’e’,’1‘,’2‘,’3‘,’4‘,0

而且由於str2輸入字符數為4個其佔用空間也超出了str2的空間範圍,那麼上邊存儲的0值也不知道覆蓋了什麼變量的位置,導致其他變量的值被衝掉了。

當執行printf(“%s\n”,str1);時,printf從str1[0]開始輸出的字符串(遇0結束輸出)為abcde1234

當執行printf(“%s\n”,str2);時,printf從str2[0]開始輸出的字符串(遇0結束輸出)為1234

所以你輸入的第1個字符串字符數少於5時,存儲不會溢出,多於4個時,末尾的0就會被輸入的str2所覆蓋而失效,且多於5的字符也會被覆蓋。scanf並不能保證輸入字符的長短不會溢出,你應當在設計程序時考慮到這點,預先定義足夠的字符串保存空間或用其他方法來避免這個問題的出現。

C語言字符數組如何初始化?

C語言允許用字符串的方式對數組作初始化賦值。例如:

static char c[]={‘c’,’ ‘,’p’,’r’,’o’,’g’,’r’,’a’,’m’}; 可寫為:

static char c[]={“C program”}; 或去掉{}寫為:

static char c[]=”C program”;

當對全體元素賦初值時也可以省去長度說明。例如:static char c[]={`c`,` `,`p`,`r`,`o`,`g`,`r`,`a`,`m`};這時C數組的長度自動定為9。

擴展資料:

數組的使用規則:

1.可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。

2.只能給元素逐個賦值,不能給數組整體賦值。例如給十個元素全部賦1值,只能寫為:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:static int a[10]=1;請注意:在C、C#語言中是這樣,但並非在所有涉及數組的地方都這樣,數據庫是從1開始。

3.如不給可初始化的數組賦初值,則全部元素均為0值。

4.如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。例如:static int a[5]={1,2,3,4,5};可寫為:static int a[]={1,2,3,4,5};動態賦值可以在程序執行過程中,對數組作動態賦值。這時可用循環語句配合scanf函數逐個對數組元素賦值。

參考資料:

百度百科-數組

c語言字符數組初始化

如果是定義的全局,變量字符數組可以不用初始化因為全局變量會自動初始化為0值。如果是局部變量可以在定義的時候就給他初始化,也可以在定義完成以後,再用一個循環對他的所有元素進行初始化。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/191972.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-30 15:14
下一篇 2024-11-30 15:14

相關推薦

  • 英語年齡用連字符號(Hyphenation for English Age)

    英語年齡通常使用連字符號表示,比如 “five-year-old boy”。本文將從多個方面探討英語年齡的連字符使用問題。 一、英語年齡的表達方式 英語中表…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python中將字符串轉化為浮點數

    本文將介紹在Python中將字符串轉化為浮點數的常用方法。在介紹方法之前,我們先來思考一下這個問題應該如何解決。 一、eval函數 在Python中,最簡單、最常用的將字符串轉化為…

    編程 2025-04-29
  • Python字符轉列表指南

    Python是一個極為流行的腳本語言,在數據處理、數據分析、人工智能等領域廣泛應用。在很多場景下需要將字符串轉換為列表,以便於操作和處理,本篇文章將從多個方面對Python字符轉列…

    編程 2025-04-29
  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • Python學習筆記:去除字符串最後一個字符的方法

    本文將從多個方面詳細闡述如何通過Python去除字符串最後一個字符,包括使用切片、pop()、刪除、替換等方法來實現。 一、字符串切片 在Python中,可以通過字符串切片的方式來…

    編程 2025-04-29
  • Python去掉數組的中括號

    在Python中,被中括號包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括號。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29

發表回復

登錄後才能評論