在 C語言中,字符數組是一種特殊的數組,用于存儲和處理字符串。理解字符數組的輸入和輸出操作對于初學者來說至關重要,因為這是處理文本數據的基礎。
字符數組的定義與初始化
在討論輸入輸出之前,我們先來回顧一下字符數組的定義和初始化方法。在 C語言中,可以使用以下方式定義和初始化字符數組:
char str1[20]; // 定義一個可容納 19 個字符的數組(最后一個位置留給'\0')
char str2[] = "Hello"; // 定義并初始化,數組長度自動計算為 6
char str3[10] = "World"; // 定義指定長度的數組并初始化
需要注意的是,C語言中的字符串實際上是以空字符'\0'
結尾的字符數組。這個空字符用于標識字符串的結束,因此在定義字符數組時,要確保數組長度比實際字符數多 1,以容納這個結束符。
?
字符數組的輸入方法
C語言提供了多種方法來輸入字符數組,我們將逐一介紹這些方法,并討論它們的優缺點。
1. 使用scanf()函數
scanf() 函數是C語言中常用的輸入函數之一,它可以用來讀取字符數組,但有一些限制和注意事項:
/**
* 系統學習C語言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[30];printf("請輸入一個字符串:");scanf("%s", str);printf("你輸入的字符串是:%s\n", str);return 0;
}
輸出結果:
請輸入一個字符串:Hello World
你輸入的字符串是:Hello
使用 scanf() 函數輸入字符數組時,有以下幾點需要注意:
- scanf() 在遇到空格、制表符或換行符時會停止讀取,這意味著它無法讀取包含空格的完整字符串。
- scanf() 不會自動檢查數組邊界,可能導致緩沖區溢出。為了安全起見,可以使用 scanf() 的安全版本 scanf_s()(在某些編譯器中可用),或者在使用 scanf() 時限制輸入長度:
scanf("%19s", str); // 限制最多讀取 19 個字符,留出一個位置給 '\0'
2. 使用gets()函數(不推薦)
gets() 函數可以讀取包含空格的整行輸入,但由于它不進行邊界檢查,容易導致緩沖區溢出,因此在現代 C 編程中不推薦使用。
/**
* 系統學習C語言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[20];printf("請輸入一個字符串:");gets(str); // 不推薦使用printf("你輸入的字符串是:%s\n", str);return 0;
}
輸出結果:
請輸入一個字符串:Hello World
你輸入的字符串是:Hello World
3. 使用fgets()函數
fgets() 函數是一個更安全的選擇,它允許你指定最大讀取長度,并且可以讀取包含空格的整行輸入:
/**
* 系統學習C語言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[20];printf("請輸入一個字符串:");fgets(str, sizeof(str), stdin);printf("你輸入的字符串是:%s", str);return 0;
}
輸出結果:
請輸入一個字符串:Hello World
你輸入的字符串是:Hello World
使用 fgets() 函數時,需要注意以下幾點:
- fgets() 會讀取換行符 '\n' 并將其存儲在字符數組中,如果不需要換行符,可以在讀取后手動將其刪除。
- 如果輸入的字符串長度超過指定的最大長度,fgets() 會自動截斷字符串,確保不會發生緩沖區溢出。
4. 逐字符輸入
如果需要更精細的控制,可以使用 getchar() 函數逐個字符地輸入:
/**
* 系統學習C語言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[20];int i = 0;char ch;printf("請輸入一個字符串(按回車結束):");while ((ch = getchar()) != '\n' && i < 19) {str[i++] = ch;}str[i] = '\0'; // 添加字符串結束符printf("你輸入的字符串是:%s\n", str);return 0;
}
輸出結果:
請輸入一個字符串(按回車結束):hello world
你輸入的字符串是:hello world?
?
字符數組的輸出方法
相比輸入,字符數組的輸出方法相對簡單,以下是幾種常用的輸出方法。
1. 使用 printf() 函數
printf() 函數是最常用的輸出方法,使用 %s 格式說明符可以輸出整個字符串:
/**
* 系統學習C語言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[] = "Hello, World!";printf("字符串內容:%s\n", str);return 0;
}
輸出結果:
字符串內容:Hello, World!
2. 使用 puts() 函數
puts() 函數專門用于輸出字符串,它會自動在輸出后添加換行符:
/**
* 系統學習C語言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[] = "Hello, World!";puts(str);return 0;
}
輸出結果:
Hello, World!
3. 逐字符輸出
如果需要更精細的控制,可以使用循環逐個字符地輸出:
/**
* 系統學習C語言 https://xiecoding.cn/c/
**/
#include <stdio.h>int main() {char str[] = "Hello, World!";int i = 0;while (str[i] != '\0') {putchar(str[i]);i++;}putchar('\n');return 0;
}
輸出結果:
Hello, World!?
?