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

C語言字串賦值給二維字符陣列:正確姿勢與常見陷阱

     編輯:C 語言問答

正確初始化語法


// 1. 編譯期常量初始化 (推薦)
char arr[2][5] = { "1111", "2222" };  // 自動補 \0,實際各佔 5 字節

// 2. 運行期 strcpy 逐行複製
char arr[2][5];
strcpy(arr[0], "1111");
strcpy(arr[1], "2222");

// 3. 讀取輸入 (安全)
for (int i = 0; i < 2; i++) {
    scanf("%4s", arr[i]);  // 寬度限制防溢出
}

輸出遍歷模板


for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 5; j++) {
        printf("%c ", arr[i][j]);  // 逐字符輸出含 \0
    }
    putchar('\n');
}
// 或直接輸出字串
for (int i = 0; i < 2; i++) {
    printf("%s\n", arr[i]);
}

常見錯誤與修正

錯誤代碼問題修正
char a[2][5] = {"1111", "2222"}; 後 a[0] = "new";陣列名非左值,不可整體賦值用 strcpy(a[0], "new");
scanf("%s", a);將整個二維陣列當作一維,導致資料連續寫入越界scanf("%4s", a[i]); 逐行讀取
printf("%s", a);%s 期望 char*,傳入 char(*)[5] 類型不匹配printf("%s", a[i]);

動態分配版 (行長不固定)


char **arr = malloc(rows * sizeof(char*));
for (int i = 0; i < rows; i++) {
    arr[i] = malloc(cols * sizeof(char));
    strcpy(arr[i], source[i]);
}
// 釋放
for (int i = 0; i < rows; i++) free(arr[i]);
free(arr);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved