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

标签 c pointers segmentation-fault swap

我正在尝试编写一个简单的 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;
}

它确实打印了正确的结果,但随后给出了 SEGMENTATION FAULT。它发生在主函数的“return 0”语句处。

你能帮我弄清楚为什么会发生 SEG FAULT。

谢谢。

最佳答案

在您的 swap() 函数中,问问自己:

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

问:temp 现在指向哪里?
A:未知,可能在某个危险的地方。

*temp = *a;

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

相反,使用 char:

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

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

关于C 程序在给出正确输出后意外崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27862945/

相关文章:

c - 为什么将指向字符串的指针传递给函数时是 2 星

c++ - 更改指向数组的指针以获取特定的数组元素

linux - ARM/Linux 上的段错误

qsort 比较函数中的 const 限定符

c - 线程: Passing struct to function

c - ld a.o b.o -e main -o ab 不起作用

c++ - ofstream 指针的 vector

c++ - atoi(str) 中的段错误

c++ - char * 段错误

c - 如何打印具有字节值的字符串数组