在前麵介紹字符串常量時,已說明字符串總是以“\0”作為結束符。因此當把一個字符串常量存入一個數組時,也把結束符“\0”存入數組,並以此作為該字符串是否結束的標誌。有了“\0”標誌,就不必再用字符數組的長度來判斷字符串的長度了,“\0”也稱字符串結束標誌符。
C語言還允許使用字符串的方式對數組作初始化賦值。例如:
charstr1[]={H,e,l,l,o,,C,!};
可寫為:
charstr2[]={"HelloC!"};
還可以寫為:
charstr3[]="HelloC!";
需要注意的是,用字符串方式賦值比用字符逐個賦值要多占一個字節,用於存放字符串結束標誌“\0”,即數組str1的長度是8,而數組str2和數組str3的長度都是9。
數組str2和數組str3中的“\0”是由C語言編譯係統自動加上的。由於采用了“\0”標誌,所以在用字符串賦初值時一般無需指定數組的長度,而由係統自行處理。在采用字符串方式後,字符數組的輸入輸出將變得簡單方便。
除了上述用字符串賦初值的辦法外,還可用printf函數和scanf函數一次性輸入輸出一個字符數組中的字符串,而不必使用循環語句逐個地輸入輸出每個字符。
[例77]由鍵盤輸入一串字符串並輸出。
#include
voidmain()
{charstring[100];
printf("Inputastring,length
voidmain()
{charstring[]="Niceweather!";
puts(string);
puts("Isn’tit?");
}
程序運行結果:
Niceweather!
Isn’tit?
從程序中可以看出,puts函數的參數可以是字符數組名,也可以是字符串常量。與printf函數不同,puts函數顯示字符串時自動在其後添加一個換行符,故輸出顯示有兩行。puts函數完全可以由printf函數取代,當需要按一定格式輸出時,則通常使用printf函數。
2.字符串輸入函數gets
格式:gets(字符數組名)
功能:從標準輸入設備(鍵盤)獲得一個字符串。
[例79]字符串輸入。
#include
voidmain()
{
charname[30];
puts("Hi,what’syourname?");
gets(name);
printf("Ah!%s,nicename!\n",name);
}
程序運行結果:
Hi,what’syourname?
JohnSmith
Ah!JohnSmith,nicename!
可以看出,輸入的字符串沒有固定的長度,所以gets函數需要知道輸入何時結束。解決辦法是gets函數讀取字符串直到遇到第一個換行符“\n”時結束,並將“\n”丟棄,用“\0”取而代之。