首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言字符數組與字符串處理:初始化、輸入輸出、scanf 空格陷阱

     編輯:關於C語言

字符數組初始化

逐字符初始化


static char c[10] = {'c',' ','p','r','o','g','r','a','m'};
// c[9] 自動為 0

字符串初始化(自動添加 \0)


static char c[] = "C program"; // 長度自動為 10
// 等價於 static char c[] = {"C program"};

字符串方式佔用長度+1 字節(含 \0)。

字符串輸入輸出

輸出


printf("%s\n", c); // 正確
// printf("%s", c[]); // 錯誤

輸入


char st[15];
scanf("%s", st); // 數組名即地址,無需 &
printf("%s\n", st);
  • 長度限制:輸入 < 14 字符(預留 \0)
  • 空格陷阱:%s 遇空格停止

空格陷阱演示


// 輸入 "this is a book"
// 輸出 "this" — 空格後內容丟失

解決方案:多數組分段讀取


char st1[6], st2[6], st3[6], st4[6];
scanf("%s%s%s%s", st1, st2, st3, st4);
printf("%s %s %s %s\n", st1, st2, st3, st4);
// 輸出 "this is a book"

為什麼 scanf 字符串不用 &?

數組名在表達式中退化為首元素地址(&st[0]),本身即地址,加 & 類型錯誤(char (*)[15] vs char *)。

printf 輸出機制

按數組名找到首地址,逐字符輸出直到遇到 \0。

二維字符數組示例


main() {
    int i, j;
    char a[][5] = {{'B','A','S','I','C'}, {'d','B','A','S','E'}};
    for (i=0; i<=1; i++) {
        for (j=0; j<=4; j++) printf("%c", a[i][j]);
        printf("\n");
    }
}
// 輸出:
// BASIC
// dBASE

最佳實踐

  • 輸入含空格字符串用 fgets 或 scanf("%[^\n]")
  • 指定字段寬度防溢出:scanf("%14s", st)
  • 字符串處理優先用標準庫函數(string.h)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved