C 中的就地字符串反转

Tik*_*iki 0 c string reverse in-place

我正在尝试学习 C 的基础知识,但我无法弄清楚为什么这段代码不起作用。reverse() 中的 while 循环导致总线错误。我在编程面试书中发现几乎相同的代码作为有效的解决方案,但是我在这里看到的这个或其他类似的方法都对我有用,没有总线错误。

#include <stdio.h>

void reverse(char* str) {
 char* end = str;
 char tmp = 0;
 if(str) {
  while(*end) {
   end++;
  }
  --end;
  while(end>str) {
   tmp = *end;
   *end-- = *str;
   *str++ = tmp;
  }
 }
}

int main() {
 char* a = "12";
 puts(a);
 reverse(a);
 puts(a);

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*odd 5

问题是您试图反转只读的常量文字字符串。更改的声明amain,以char a[] = "12";使其可写入字符数组,而不是