有關字串%s的問題(+沒搞懂的陣列越界)
阿新 • • 發佈:2018-12-20
-
字串的格式控制符為%s
-
字串只能被賦值給陣列(想想也是,畢竟這麼一串兒呢)
-
字串%s在輸入/輸出時只用打陣列的名 例: char a[20]; scanf(“%s”,&a); printf(“%s”, &a );
-
但如果是輸入/輸出字元%c,就得精確到陣列的哪一個了,用a[xx] ——"xx"為某整數
-
一維陣列如果定義賦初值時初值個數小於定義的元素組個數,系統就會自動給後面的數值型元素附0值,字元型元素附 ‘\0’ 值
同時轉載下網上大佬的話:
gets,scanf都會在末尾加上\0的,要不然字串就沒法結束了; 他們的不同在於,scanf碰到緩衝區裡面的空字元(空格,tab,回車,換行就會截斷並新增\0),而gets是要等回車才截斷字串並新增\0的 比如用輸入字串:abcdefg hijk回車 用scanf的話,會得到abcdefg,而gets則是:abcdefg hijk
(一模一樣的原句感覺沒什麼好補充的。。。)
PS:陣列越界的問題(沒搞明白)
當我在codeblock上用如下程式碼:
#include<stdio.h>
int main()
{
char a[5];
gets(a);
printf("%s",a);
return 0;
}
輸入:i can do this 輸出如下:
明明輸入的超過了陣列的長度,可還能正常輸出 老師說這是codeblock的bug,反正我還沒搞明白。。。先記上希望回頭自己能解決