C 访问字符字符串时无法理解分段错误的原因

C 访问字符字符串时无法理解分段错误的原因,c,segmentation-fault,strcpy,C,Segmentation Fault,Strcpy,运行以下代码后出现分段故障: 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); /

运行以下代码后出现分段故障:

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++;
    }

}
intmain(){
const char*string=“这不是反向的”;
字符*反向;
焦炭温度;
整数长度,i=0;
长度=strlen(字符串);
strcpy(反向,字符串);
而(i<(长度/2)){
temp=*(reverse+i);//这就是分段错误的原因。但是为什么呢?
i++;
}
}

有人能解释一下你需要为倒车分配空间的原因吗。比如说

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;
}
#包括
#包括
int main(){
const char*string=“这不是反向的”;
int length=strlen(字符串);
char*reverse=malloc(长度+1);
int i=0;
while(i
而不是
strcpy(反向,字符串)
使用
reverse=string
,因为您不需要为reverse分配空间,只需指向字符串反向,即
reverse=string

你告诉strcpy将
string
复制到
reverse
,但从来没有实际提供
reverse
的值,没有指向任何东西。明白了,很抱歉这个问题..这是我的错误..你是对的,我怎么会错过呢..reverse=malloc((strlen(string)+1)*sizeof(char));是的,你是对的,这不是C++,所以Maloc不是新的。您不需要使用
sizeof(char)
,因为它总是
1
。此外,如果您使用的是最新的C编译器,您可以这样做:
char reverse[strlen(string)+1]谢谢..如此耐心地回答这个问题..是的,我在练习一些字符串算法,但却被困在这里..是的,上面的代码不完整:)如果我将它指向一个常量字符的地址,我将无法编辑它。这有意义吗?@user2901020:您是对的,您必须将字符串文字复制到可以修改的数组中。user2901020:具有有效点,在这种情况下,您可以定义
const
指针,因为查看代码时,您似乎没有修改字符串。或者你必须复制字符串。如果你认为是这样,我很乐意删除我的答案,因为这可能会误导你。但是,你为什么要删除你的答案。很多人可能会这样想。甚至我的问题也不是一个很棒的问题。它是关于从正确或错误的事情中学习的。事实上,我们从错误的事情中学到了更多。干杯!