コードは、n個の要素の1次元ベクトルをi位置だけ左に回転させると仮定しています。たとえば、n = 8およびi = 3の場合、ベクトルabcdefghはdefghabcに回転されます。以下のコードで何が問題になっています
以下は、string_reverse関数でクラッシュします。そこに何が間違っているのか分からなかった。
#include <stdio.h>
#include <string.h>
#include < conio.h>
void string_reverse(char* str, int left, int right)
{
char *p1 = str + left;
char *p2 = str + right;
while (p1 < p2)
{
char temp = *p1;
*p1 = *p2;
*p2 = temp;
p1++;
p2--;
}
}
void rotate(char* str, int k)
{
int n = strlen(str);
string_reverse(str, 0, k - 1);
string_reverse(str, k, n - 1);
string_reverse(str, 0, n -1);
}
int main(int argc, char* argv[])
{
char* string = "abcdefghijk";
rotate(string, 3);
printf("%s",string);
getch();
return 0;
}
it crashes at
*p1 = *p2;
どのようにコンパイラを使いましたか、どのプラットフォームを実行していますか? –
「クラッシュした」とはどういう意味ですか?セグメンテーション違反ですか? – Thomas
これは、リテラルに代入するときに 'char *'を 'const'と宣言することが良い習慣であることを証明します。 – Joe