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