文字列の文字を逆にすることを主な目的とする次のコードがあります。したがって、たとえば、文字列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) であるべきだと信じています。なぜなら、私はすべての配列ではなく半分だけを調べているからです。私は正しいですか?