如何給結(jié)構(gòu)體數(shù)組賦初值?
舉例如下:
char a[10]
;1、定義的時(shí)候直接用字符串賦值char a[10]="hello";注意:不能先定義再給它賦值,如 char a[10]; a[10]="hello";這樣是錯(cuò)誤的!2、對(duì)數(shù)組中字符逐個(gè)賦值char a[10]={'h','e','l','l','o'}
;3、利用strcpychar a[10]; strcpy(a, "hello");易錯(cuò)情況:
1、char a[10]; a[10]="hello";//一個(gè)字符怎么能容納一個(gè)字符串?況且a[10]也是不存在的!
2、char a[10]; a="hello";//這種情況容易出現(xiàn),a雖然是指針,但是它已經(jīng)指向在堆棧中分配的10個(gè)字符空間,現(xiàn)在這個(gè)情況a又指向數(shù)據(jù)區(qū)中的hello常量,這里的指針a出現(xiàn)混亂,不允許!還有:不能使用關(guān)系運(yùn)算符“==”來(lái)比較兩個(gè)字符串,只能用strcmp() 函數(shù)來(lái)處理。C語(yǔ)言的運(yùn)算符根本無(wú)法操作字符串。在C語(yǔ)言中把字符串當(dāng)作數(shù)組來(lái)處理,因此,對(duì)字符串的限制方式和對(duì)數(shù)組的一樣,特別是,它們都不能用C語(yǔ)言的運(yùn)算符進(jìn)行復(fù)制和比較操作。
直接嘗試對(duì)字符串進(jìn)行復(fù)制或比較操作會(huì)失敗。
例如,假定str1和str2有如下聲明:
char str1[10], str2[10];利用=運(yùn)算符來(lái)把字符串復(fù)制到字符數(shù)組中是不可能的:
str1 = "abc"; /*** WRONG ***/str2 = str1; /*** WRONG ***/C語(yǔ)言把這些語(yǔ)句解釋為一個(gè)指針與另一個(gè)指針之間的(非法的)賦值運(yùn)算。但是,使用=初始化字符數(shù)組是合法的:
char str1[10] = "abc";這是因?yàn)樵诼暶髦校?不是賦值運(yùn)算符。
試圖使用關(guān)系運(yùn)算符或判等運(yùn)算符來(lái)比較字符串是合法的,但不會(huì)產(chǎn)生預(yù)期的結(jié)果:
if (str1==str2) ... /*** WRONG ***/這條語(yǔ)句把str1和str2作為指針來(lái)進(jìn)行比較,而不是比較兩個(gè)數(shù)組的內(nèi)容。
因?yàn)閟tr1和str2有不同的地址,所以表達(dá)式str1 == str2的值一定為0。