c - 运行时错误 "Segmentation Fault"。如何去除它? (我在 Ubuntu 中工作。)

标签 c pointers segmentation-fault

Possible Duplicate:
Getting Segmentation Fault

// reverse a string

#include`<stdlib.h>`
#include`<stdio.h>`
#include`<string.h>`
#include`<math.h>`
int main()
{

    char *string = "mohit",t;
    int  i=0,j; 
    printf(" %d %d",strlen(string), (strlen(string)/2)+1);
    for(i=0,j=(strlen(string)) ; i<(strlen(string)/2)+1 ; i++,j--)
    {
    printf("\n%d",(int) string);
    printf("\n%d",(int) string+5);
    printf("\ni string = %c", *(string + i));
    printf("\nj string = %c", *(string + j));
    t=*(string+i);
    *(string+i) = *(string + j);
    *(string + j) = t;  
    }
    printf("\n = %s", string);  
    return 0;
}

最佳答案

字符串文字可能位于内存的只读区域;不允许将指向 1 的指针分配给指向非常量字符的指针,因此您对 string 的操作会导致未定义的行为。你要么说

const char * string = "mohit";

并且不要修改字符串,或者创建一个您可以修改的自动字符数组:

char string[] = "mohit";

后者是您的情况所需要的。

此外,作为一种风格,将 char * s, t; 写在一行中可能会产生误导;它相当于,并且应该总是被替换为 char * s; char t;.

关于c - 运行时错误 "Segmentation Fault"。如何去除它? (我在 Ubuntu 中工作。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7064003/

相关文章:

c - 使用重新分配指针时的 malloc 和 free

c - C中函数调用的默认参数

c - 为什么模数操作数不适用于我的 C 代码中的输入变量?

c++ - 指向对象的指针 vector C++

c - SDL2 : getting segmentation fault with TTF_RenderText after some time?

c++ - 执行新 vector <string> 的段错误

c++ - 在 printf 之后使用 fflush 会减慢你的程序吗?

c - 指向二维数组中整行的指针

c++ - 使用指针时无限循环

c - 为什么我在数组分配时遇到段错误