方法一:指標法(動態分配記憶體)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char *src = "hello world";
int len = strlen(src);
char *dest = (char *)malloc(len + 1); // 預留 \0 空間
char *d = dest;
char *s = &src[len - 1]; // 指向最後一個字元
while (len-- != 0)
*d++ = *s--;
*d = '\0'; // 添加結束符
printf("%s\n", dest);
free(dest); // 釋放記憶體
dest = NULL; // 避免野指標
return 0;
}
方法二:陣列法(原地交換)
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello world";
int len = strlen(str);
char t;
for (int i = 0; i < len / 2; i++) {
t = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = t;
}
printf("%s\n", str);
return 0;
}
Heap 與 Stack 差異補充
- Heap(堆):手動分配/釋放(
malloc/free、new/delete),空間大。
- Stack(棧):作業系統自動分配/釋放,空間有限。編譯期變數、函數參數傳遞均在棧上。