在给出正确的输出后,C程序意外崩溃

1 c swap pointers segmentation-fault

我正在尝试编写一个简单的C程序来反转字符串.代码如下:

void swap(char* a, char* b){
    char* temp;

    *temp  = *a;
    *a = *b;
    *b = *temp;
}


char* reverseString(char* str){
    int length = strlen(str);
    int i=0;

    for(i=0; i<(length/2); i++){
            swap(&str[i], &str[length-i-1]);
    }

    return str;
}

int main(){
    char str[] = "Hello World";
    reverseString(str);
    printf("%s\n",str);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它确实打印出正确的结果,然后它发出了一个SEGMENTATION FAULT.它发生在main函数的"return 0"语句中.

你能帮我弄清楚为什么会出现SEG FAULT.

谢谢.

Pau*_*oub 7

在你的swap()功能中,问问自己:

void swap(char* a, char* b){
  char* temp;
Run Code Online (Sandbox Code Playgroud)

问:temp现在指向哪里?
答:未知,可能是危险的地方.

*temp = *a;
Run Code Online (Sandbox Code Playgroud)

然而我们只是写了一些东西到那个地方.

相反,使用char:

void swap(char* a, char* b){
  char temp;

  temp = *a;
  *a = *b;
  *b = temp;
}
Run Code Online (Sandbox Code Playgroud)