在C中反转字符串时出现分段错误

时间:2013-02-12 10:40:17

标签: c string segmentation-fault

我有以下代码,其主要目的是反转字符串的字符。因此,例如,字符串I love cats将转换为stac evol I

#include <string.h>
#include <stddef.h>
#include <stdio.h>

void reverseString(char *str)
{
   int size = strlen(str);
   char *end = str + size - 1;
   char tmp;

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

int main()
{
  char *str = "Y U SEGMENTATION FAULT?";
  reverseString(str);

}

当我运行这个时,我遇到了分段错误,我看不清楚原因。另外,我遇​​到的另一个问题是这个函数的时间复杂度(Big O)。我相信它应该是O(n / 2),因为我没有通过所有阵列而只是它的一半。我是对的吗?

1 个答案:

答案 0 :(得分:1)

您正在尝试修改字符文字,即只读数据段中的字符串。使用strdup在堆上复制/复制它,例如:

char *str = strdup("It's OK now");

或者使它成为本地数组(将字符串放在堆栈上):

char[] str = "It's OK now";