1. 程式人生 > >有關字串%s的問題(+沒搞懂的陣列越界)

有關字串%s的問題(+沒搞懂的陣列越界)

  1. 字串的格式控制符為%s

  2. 字串只能被賦值給陣列(想想也是,畢竟這麼一串兒呢)

  3. 字串%s在輸入/輸出時只用打陣列的名 例: char a[20]; scanf(“%s”,&a); printf(“%s”, &a );

  4. 但如果是輸入/輸出字元%c,就得精確到陣列的哪一個了,用a[xx] ——"xx"為某整數

  5. 一維陣列如果定義賦初值時初值個數小於定義的元素組個數,系統就會自動給後面的數值型元素附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,反正我還沒搞明白。。。先記上希望回頭自己能解決