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

C 大小寫轉換:陣列大小不足導致覆寫結束符 '\0',產生亂碼

     編輯:程式設計綜合問答

程式 char array[5]; scanf("%s", &array); 讀入字串後,for(i=0;i<5;i++) array[i]+=32; 將**結束符 '\0' 也加 32**,導致 printf("%s") 繼續讀取記憶體直到遇到下一個 0,印出亂碼 (如 ♣)。

修正

  1. 陣列至少 char array[100],防止輸入溢位。
  2. 迴圈條件改為 array[i] != '\0' 或 i < strlen(array),**不處理結束符**。
  3. scanf("%99s", array) 限制讀取長度。

正確程式

#include <stdio.h>
#include <string.h>
int main() {
    char array[100];
    scanf("%99s", array);
    for (int i = 0; array[i]; ++i) array[i] += 32; // 僅處理有效字元
    printf("%s\n", array);
    return 0;
}

補充

  • 標準庫 tolower() 更安全 (處理非字母不變)。
  • array[i] += 32 僅適用 ASCII 字母,非通用寫法。

**「不動結束符」**是字串處理鐵律,違者必現亂碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved