char *s = "abcdefg";
reverse(s); // 嘗試原地修改
void reverse(char *s) {
char *end = s;
while(*end) end++;
end--;
while(s < end) {
char temp = *s;
*s++ = *end;
*end-- = temp;
}
}
char *s = "abcdefg"; 使 s 指向只讀數據段中的字符串字面量,任何嘗試修改的操作(如 *s = ...)均導致未定義行為(通常是段錯誤)。
// 方法一:字符數組(棧上分配,可修改)
char s[] = "abcdefg";
reverse(s);
// 方法二:動態分配
char *s = strdup("abcdefg"); // 需 free
reverse(s);
free(s);
C 標準庫無 strrev,但可用 std::reverse(C++)或自寫通用版本:
void reverse(char *str) {
if (!str) return;
char *end = str + strlen(str) - 1;
while (str < end) {
char tmp = *str;
*str++ = *end;
*end-- = tmp;
}
}