为什么这个程序会给出分段错误?

时间:2010-09-17 11:58:03

标签: c pointers string segmentation-fault

这是一个初学者的问题:为什么这会打破/给出错误?

#include <stdio.h>    
#include <stdlib.h> 
#include <string.h>

char *strtrim_right(char *p)
{
  char *end;
  int len;
  len = strlen( p);
  while (*p && len)
    {
    end = p + len-1;
    if(isalpha(*end))
     *end =0;
   else 
    break;      
    }
  return(p);
}


int main ()  
{  
  char *x="PM123BFD";
  strtrim_right(x);
  printf("%s", x);
  return 0;
}  

3 个答案:

答案 0 :(得分:11)

更改

char *x="PM123BFD";

char x[]="PM123BFD";

您无法修改字符串文字,因此请将函数传递给它可以修改的char数组。

答案 1 :(得分:5)

我不明白它为什么会破坏 - 我宁愿期待一个无限循环:while条件总是为真,循环永远不会离开。

重做循环条件,它是borked。然后查看您拥有的变量:您永远不会更改plen的值。这不对。此外,循环内部的代码比需要的复杂得多。想想你是否真的需要三个变量。

答案 2 :(得分:0)

好的,多亏了上面的2个答案,现在似乎还可以:

#include <stdio.h>    
#include <stdlib.h> 
#include <string.h>

char *strtrim_right(char *p)
{
  char *end;
  int len;
  len = strlen( p);
  while (*p && len)
    {
    end = p + len-1;
    if(isalpha(*end))
     *end =0;
   else 
    break;
len = strlen(p);
    }
  return(p);
}


int main ()  
{  
  char x[]="PM123BFD";
  strtrim_right(x);
  printf("%s", x);
  return 0;
}