1

次のコードを実行した後のセグメンテーション違反:

int main(){
    const char *string = "This is not reverse";
    char *reverse;
    char temp;
    int length, i = 0;
    length = strlen(string);
    strcpy(reverse, string);

    while(i < (length/2)){
       temp = *(reverse+i); // this is the reason for segmentation fault..but why? 
       i++;
    }

}

誰か同じ理由を説明してくれませんか

4

2 に答える 2

4

reverse用のスペースを割り当てる必要があります。例えば

char *reverse = malloc(strlen(string) + 1);

ちなみに、残りのコードにはアルゴリズムのバグがあるようです。あなたがやりたかったことは次のようなものだったと思います:

#include <string.h>
#include <malloc.h>

int main(){
  const char *string = "This is not reverse";
  int length = strlen(string);
  char *reverse = malloc(length + 1);

  int i = 0;
  while(i < length){
    *(reverse + i) = *(string + length - i - 1);
    i++;
  }

  printf("%s\n", reverse);
  return 0;
}
于 2013-11-10T06:35:51.563 に答える
-1

strcpy(reverse, string);useの代わりに reverse = string, reverse 用のスペースを確保する必要がないので, 文字列に reverse を指すだけです.reverse = string

于 2013-11-10T06:43:30.137 に答える