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

C語言指針實現字符串逆序輸出教學範例

     編輯:關於C

程式碼功能說明

本範例展示如何使用C語言指針操作字符數組,實現字符串的逆序輸出。程序通過雙指針協作,先定位字符串結尾,再反向遍歷輸出每個字符,是指針算術運算的經典入門練習。

完整代碼

#include <stdio.h>
#include <conio.h>  // for getch()

int main() {
    char str[100];  // 擴大緩衝區防止溢出
    char *start, *end;

    printf("請輸入一個字符串: ");
    // 使用 fgets 替代危險的 gets()
    if (fgets(str, sizeof(str), stdin) != NULL) {
        // 移除 fgets 保留的換行符
        size_t len = strlen(str);
        if (len > 0 && str[len - 1] == '\n') {
            str[len - 1] = '\0';
        }

        start = end = str;

        // 移動 end 指針到字符串末尾(指向 '\0')
        while (*end != '\0') {
            end++;
        }
        // 回退到最後一個有效字符
        end--;

        printf("逆序結果: ");
        // 從尾向頭遍歷輸出
        while (end >= start) {
            putchar(*end);
            end--;
        }
        putchar('\n');
    }

    // getch(); // 視環境決定是否保留
    return 0;
}

核心邏輯圖解

  1. 初始化:start和end同時指向字符串首地址
  2. 定位末尾:while(*end != '\0') end++; 使end指向結束符
  3. 回退一位:end--; 讓end指向最後一個可見字符
  4. 逆序輸出:while(end >= start) { putchar(*end--); } 反向遍歷打印

安全性改進說明

  • 棄用 gets():原代碼使用gets()極易導致緩衝區溢出,已替換為安全的fgets()
  • 邊界檢查:增加輸入長度限制,並處理換行符殘留問題
  • 標準化輸出:使用putchar()逐字符輸出,避免格式化字符串漏洞

進階思考

若需就地反轉字符串(而非單純輸出),可使用雙指針交換法:

void reverse_string(char *str) {
    char *left = str;
    char *right = str + strlen(str) - 1;
    while (left < right) {
        char temp = *left;
        *left++ = *right;
        *right-- = temp;
    }
}

這是C語言面試高頻考點,掌握指針移動與字符交換邏輯至關重要。

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