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

C 語言指標反轉字串:for 迴圈指標移動邏輯錯誤修正

     編輯:程式設計綜合問答

目標:將字串 "abc" 反轉存入 ar1 並輸出 "cba"。原始碼在定位指標 p 至字串末尾時,多遞增一次導致位移錯誤。

錯誤分析

for (; *p++ != '\0';) ;  // 迴圈結束時 p 指向 '\0' 之後的下一個位址
p--;                     // 只退一步,實際指向 '\0',而非最後一個有效字元 'c'

修正方式

需再 p-- 一次(或 p -= 2),使 p 指向最後一個有效字元:

for (; *p++ != '\0';) ;
p -= 2;  // 現在 p 指向 'c'

完整修正程式碼

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

int main(void) {
    char ar[] = "abc";
    char ar1[4] = {0};
    char *p = ar;

    // 移至最後一個有效字元
    for (; *p++ != '\0';) ;
    p -= 2;

    int i = strlen(ar);
    for (int j = 0; j < i; j++) {
        ar1[j] = *p--;
    }
    puts(ar1);  // 輸出 cba
    return 0;
}

替代寫法(更清晰)

char *p = ar + strlen(ar) - 1;  // 直接指向最後一字元
for (int j = 0; j < i; j++) ar1[j] = *p--;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved