iT邦幫忙

0

D15. 學習基礎C、C++語言

c
  • 分享至 

  • xImage
  •  

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()


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言