来自破解编码面试的代码中的EXC_BAD_ACCESS

时间:2014-03-08 22:58:20

标签: c exc-bad-access

我尝试使用Cracking the coding interview中的代码来运行反向字符串函数。我不知道代码是错还是我应该使用另一个IDE(我使用Xcode 5.2)。我是C编程新手所以请解释一下。感谢。

#include <stdio.h>

void reverse(char *str);

int main(int argc, const char * argv[])
{

  char *str = "Hello, World!";
  reverse(str);
  printf("%s", str);
  return 0;
}

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

    while (str < end) {
      tmp = *str;
      *str++ = *end;
      *end-- = tmp;
    }
  }
}

2 个答案:

答案 0 :(得分:2)

这里的问题是你尝试修改字符串文字(str指向那个),字符串文字是常量(即只读,不可修改)。

尝试修改某些常量是未定义的行为。未定义的行为可能有时似乎有效,但大多数情况下它会在运行时导致崩溃。

找到未定义行为(或其他可能不好的行为)的可能案例的好建议是启用更多警告。然后你应该得到一个关于将常量数组(所有字符串文字都是常量数组)赋值给非常量指针的警告。

答案 1 :(得分:0)

char *str = "Hello, World!";

制作

char str[] = "Hello World!";