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

C 字串解密:單字反轉邏輯與堆疊溢位風險修正

     編輯:程式設計綜合問答

題目:輸入 N 行已加密字串 (每單字反序),還原原文。原始碼宣告 SString s[50000] 於區域變數,**陣列過大導致堆疊溢位 (Stack Overflow)**。

修正策略

  1. 將大型陣列宣告為 **static** 或 **全域**,配置於 BSS 段而非堆疊。
  2. 或改用動態配置 malloc / vector (C++)。
  3. 單行處理即輸出,無需全存陣列,大幅減少記憶體佔用。

精簡版邏輯 (逐行處理)

#include <stdio.h>
#include <string.h>

void decode_line(char* line) {
    char* token = strtok(line, " ");
    while (token) {
        for (int i = strlen(token)-1; i >= 0; --i) putchar(token[i]);
        token = strtok(NULL, " ");
        if (token) putchar(' ');
    }
    putchar('\n');
}

int main() {
    int N; scanf("%d\n", &N);
    char line[1000];
    while (N-- && fgets(line, sizeof(line), stdin)) {
        line[strcspn(line, "\n")] = 0; // 移除換行
        decode_line(line);
    }
    return 0;
}

關鍵點

  • 避免大型區域陣列,改用流式處理。
  • strtok 分割單字,反序列印即可,無需額外緩衝區。
  • 若題目要求大寫/小寫保持,直接反序字元即可,不需轉換大小寫。

記憶體配置策略決定程式能否在 OJ 環境通過執行。

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