0

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

4

1 に答える 1

1

文字リテラル、読み取り専用データ セグメントの文字列を変更しようとしています。たとえば、次のように、strdup を使用してヒープにコピー/複製を作成します。

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

または、ローカル配列にします (文字列をスタックに置きます):

char[] str = "It's OK now";
于 2013-02-12T10:42:14.180 に答える