本範例展示如何使用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;
}
start和end同時指向字符串首地址while(*end != '\0') end++; 使end指向結束符end--; 讓end指向最後一個可見字符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語言面試高頻考點,掌握指針移動與字符交換邏輯至關重要。