c - C中的就地字符串反转

标签 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;
}

最佳答案

问题是您正在尝试反转一个只读的常量文字字符串。将 maina 的声明更改为 char a[] = "12"; 以使其成为可写的 char 数组

关于c - C中的就地字符串反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4785967/

相关文章:

javascript - 获取数组中字符串的最后一个元素(Javascript)

php - 如何反转 Unicode 字符串

r - 如何反转向量的顺序?

c - 在数组中存储奇数和偶数

c++ - 获取 google 搜索 ssl pem 证书

c - 有没有一个示例如何捕获当我用鼠标右键单击任务栏上的图标时的事件?

c# - 字符串操作和分割字符串

javascript - 将一个数组中的所有符号替换为另一个 JS 中的互补符号

sorting - 如何对红色列表进行反向排序?

c++ - 为什么要在结构中保留内存?