當前位置:首頁 » 編程語言 » c語言字元串與數組

c語言字元串與數組

發布時間: 2022-08-19 08:57:02

c語言的字元數組和字元串的區別

1、長度不同:

對於字元數組,其長度是固定的,其中任何一個數組元素都可以為 null 字元。因此,字元數組不一定是字元串。字元串的結尾是以null 字元結尾,所以長度會有所不同。

2、結尾不同

對於字元串,它必須以 null 字元(也就是'',用十六進製表示為 0x00)結尾,其後的字元不屬於該字元串。

字元串一定是字元數組,它是最後一個字元為 null 字元的字元數組。字元數組則不會自動增加任何東西。

3、對於字元串,可以直接使用 printf 的 %s 列印其內容;而對字元數組,很顯然使用 printf 的 %s 列印其內容是不合適的。

(1)c語言字元串與數組擴展閱讀:

字元串函數應用

1.連接運算 concat(s1,s2,s3…sn) 相當於s1+s2+s3+…+sn.

例:concat('11','aa')='11aa';

2. 求子串。 Copy(s,I,I) 從字元串s中截取第I個字元開始後的長度為l的子串。

例:('abdag',2,3)='bda』

3. 刪除子串。過程 Delete(s,I,l) 從字元串s中刪除第I個字元開始後的長度為l的子串。

例:s:='abcde';delete(s,2,3);結果s:='ae';

4. 插入子串。 過程Insert(s1,s2,I) 把s1插入到s2的第I個位置

例:s:=abc;insert('12',s,2);結果s:='a12bc';

Ⅱ C語言編程字元數組與字元串

voidstringLower(char*str){

while(*str!='')

{if(*str>='A'&&*str<='Z')

*str+=32;

str++;

}

}

intmain(intargc,char*argv[])

{charstr[20];

scanf("%s",str);

stringLower(str);

printf("%s ",str);

運行結果

Ⅲ c語言字元串跟字元數組的定義都一樣,那如何區分呢

實現目的
我們在用C語言編寫程序時,經常會遇到使用字元串數組的情況,這種數組的特點是, 數組中的每個元素都是一個字元串,但每個字元串的長度卻不相同。如果你使用C++語言進行編程的話,實現起來相對比較簡單,只需直接選擇標准模板庫的字元串string類,在代碼中定義該類的一個數組即可實現。現在的問題是,在純C語言中如何定義這樣的一個字元串數組呢?
如對於下面的一個字元串數組:
str = {
「I love C.」,
「I love C++.」,
「I love JAVA.」,
「I love Python.」,
「I love LabVIEW.」
}
下面給出C語言中的兩種定義方法。
方法1:定義一個char類型的二維數組
這種方法是通過定義一個char類型的二維數組實現,通過二維數組的行索引可得到數組中的每個字元串,列的大小限定了每個字元串所能包含的最大字元個數,所以採用這種定義方式時,列的大小必須不能小於數組所有字元串的最大長度。如對於上面的數組,C語言的定義代碼如下:

在取該數組的每個字元串時,直接對行索引即可。
方法2:定義一個指向char類型的指針數組
這種方法是通過定義一個指向char類型的指針數組實現,數組中的每個元素都是一個指針,通過該指針可得到數組中的每個字元串。如對於上面的數組,C語言的定義代碼如下:

兩種方法對比
上面的兩種方法都可以實現我們的目的,但在內存的佔用上兩種方法不同。第1種方法定義了一個5行20列的二維數組,即每個字元串所佔的位元組長度都為20個,所以共需要佔用100個位元組,而第2種方法是定義的指針數組,每個指針指向的字元串佔用的位元組長度是其實際長度,所以其總的長度肯定小於100個位元組。綜合來講,第1種方法相對於第2種方法,造成了存儲空間的浪費情況。
字元串數組定義及使用的完整測試代碼
下面給出這個例子的完整的C語言測試代碼,如下圖所示:

程序運行結果如下圖所示:

總結
一般在C語言中定義字元串的數組時,推薦使用第2種方法,特別是對於單片機、嵌入式等方面的程序開發時,可以充分利用有限的硬體資源,避免存儲空間的浪費。

Ⅳ C語言中字元串和數組的區別

數組的元素可以是任意一種類型,而字元串是一種特殊的數組,它使用了一種眾所周知的確定其長度的規則。 有兩種類型的語言,一種簡單地將字元串看作是一個字元數組,另一種將字元串看作是一種特殊的類型。C屬於前一種,但有一點補充,即C字元串是以一個NUL字元結束的。數組的值和數組中第一個元素的地址(或指向該元素的指針)是相同的,因此通常一個C字元串和一個字元指針是等價的。 一個數組的長度可以是任意的。當數組名用作函數的參數時,函數無法通過數組名本身知道數組的大小,因此必須引入某種規則。對字元串來說,這種規則就是字元串的最後一個字元是ASCII字元NUL('\0')。 在C中,int類型值的字面值可以是42這樣的值,字元的字面值可以是『*』這樣的值,浮點型值的字面值可以是4.2el這樣的單精度值或雙精度值。 注意:實際上,一個char類型字面值是一個int類型字面值的另一種表示方式,只不過使用了一種有趣的句法,例如當42和'*'都表示char類型的值時,它們是兩個完全相同的值。然而,在C++中情況有所不同,C++有真正的char類型字面值和char類型函數參數,並且通常會更仔細地區分char類型和int類型,整數數組和字元數組沒有字面值。然而,如果沒有字元串字面值,程序編寫起來就會很困難,因此C提供了字元串字面值。需要注意的是,按照慣例C字元串總是以NUL字元結束,因此C字元串的字面值也以NUL字元結束,例如,「six times nine」的長度是15個字元(包括NUL終止符),而不是你看得見的14個字元。 關於字元串字面值還有一條鮮為人知但非常有用的規則,如果程序中有兩條緊挨著的字元串字面值,編譯程序會將它們當作一條長的字元串字面值來對待,並且只使用一個NUL終止符。也就是說,「Hello,」world」和「Hello,world」是相同的,而以下這段代碼中的幾條字元串字面值也可以任意分割組合: char message[]= 」This is an extremely long prompt\n」 」How long is it?\n」 」It's so long,\n」 」It wouldn't fit On one line\n」; 在定義一個字元串變數時,你需要有一個足以容納該字元串的數組或者指針,並且要保證為NUL終止符留出空間,例如,以下這段代碼中就有一個問題: char greeting[12]; strcpy(greeting,」Hello,world」); /*trouble*/ 在上例中,greeting只有容納12個字元的空間,而「Hello,world」的長度為13個字元(包括NUL終止符),因此NUL字元會被拷貝到greeting以外的某個位置,這可能會毀掉greetlng附近內存空間中的某些數據。再請看下例: char greeting[12]=」Hello,world」;/*notastring*/ 上例是沒有問題的,但此時greeting是一個字元數組,而不是一個字元串。因為上例沒有為NUL終止符留出空間,所以greeting不包含NUL字元。更好一些的方法是這樣寫: char greeting[]=」Hello,world」; 這樣編譯程序就會計算出需要多少空間來容納所有內容,包括NUL字元。 字元串字面值是字元(char類型)數組,而不是字元常量(const char類型)數組。盡管ANSIC委員會可以將字元串字面值重新定義為字元常量數組,但這會使已有的數百萬行代碼突然無法通過編譯,從而引起巨大的混亂。如果你試圖修改字元串字面值中的內容,編譯程序是 不會阻止你的,但你不應該這樣做。編譯程序可能會選擇禁止修改的內存區域來存放字元串字面值,例如ROM或者由內存映射寄存器禁止寫操作的內存區域。但是,即使字元串字面值被存放在允許修改的內存區域中,編譯程序還可能會使它們被共享。例如,如果你寫了以下代碼(並且字元串字面值是允許修改的): char *p="message"; char *q="message"; p[4]='\0'; /* p now points to」mess」*/ 編譯程序就會作出兩種可能的反應,一種是為p和q創建兩個獨立的字元串,在這種情況下,q仍然是「message」;一種是只創建一個字元串(p和q都指向它),在這種情況下,q將變成「mess」。

Ⅳ c語言字元串數組

字元串是連續的字元序列,最後以空字元'\0'作為終止符。一個字元串的長度指所有字元的數量,但不包括終止符。在 C 語言中,沒有字元串類型,自然也就沒有運算符以字元串為操作數。

字元串被存儲在元素類型為 char 或寬字元類型數組中(寬字元類型指 wchar_t、char16_t 或 char32_t)。寬字元組成的字元串也稱為寬字元串(wide string)。

C 標准庫提供了大量的函數,它們可以對字元串進行基本操作,例如字元串的比較、復制和連接等。在這些傳統的字元串函數以外,C11 新增了這些函數的「安全」版本,它們能確保字元串操作不會超出數組的邊界。

可以使用字元串字面量來初始化任何字元類型數組。

Ⅵ c語言 字元數組和字元串有什麼區別

字元數組裡面放的是你輸入的內容;
而字元串中放的也是你輸入的內容,只是結尾多了一個『\0』

熱點內容
如何給電腦硬碟加密 發布:2025-03-09 10:54:09 瀏覽:910
低能耗電腦列印伺服器 發布:2025-03-09 10:45:06 瀏覽:313
英雄聯盟免費腳本 發布:2025-03-09 10:38:14 瀏覽:26
簡訊報警腳本 發布:2025-03-09 10:27:54 瀏覽:953
寫腳本的大嬸 發布:2025-03-09 10:19:27 瀏覽:629
安卓app怎麼上線 發布:2025-03-09 10:15:11 瀏覽:149
pythonlistmax 發布:2025-03-09 10:15:10 瀏覽:681
c語言排班 發布:2025-03-09 10:06:48 瀏覽:278
安卓手機網路通訊出現問題怎麼辦 發布:2025-03-09 10:02:05 瀏覽:288
華為nm存儲卡軟體未響應 發布:2025-03-09 09:57:44 瀏覽:610