我有以下代码,其主要目的是反转字符串的字符。因此,例如,字符串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),因为我没有通过所有阵列而只是它的一半。我是对的吗?
答案 0 :(得分:1)
您正在尝试修改字符文字,即只读数据段中的字符串。使用strdup在堆上复制/复制它,例如:
char *str = strdup("It's OK now");
或者使它成为本地数组(将字符串放在堆栈上):
char[] str = "It's OK now";