D15. 字元陣列(2)
前一篇有講到字元的輸出是printf("%c",a[i]);
而字串是printf("%s",a);
輸出是一整個a而不用指定要輸出哪一格
在輸入方面的部分scanf("%s",a)一次可以取一個字串,但是缺點就是如果遇到空格的話只能讀取到空格前的字串, 像是如果用scanf輸入字串hello world時,只能記到hello而已,所以如果要讀三個單字等於要開三個陣列,這樣太 麻煩,這時我們就可以用gets()跟puts()
#include<stdio.h>
main()
{
char b[15];
gets(b);
printf("%s\n",b);
return 0;
}
但是使用gets()時,雖然已經設定陣列b的大小是15,如果輸入的字超過15個卻還是可以照樣輸出,這樣的執行結果目前還不會造成太大的問題,其實這個結果已經造成緩衝區溢位(buffer overflow),也就是說多餘的那些字元會到了未被分配的記憶體空間,如果那些記憶體空間已經存有資料,可能會擦除資料造成程式中止,所以也有另外一種函式叫做fgets()來替代gets()