2010-09-17 110 views
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;  
    } 
    return(p); 
} 


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

什么错误?什么线?什么编译器?什么平台?如果您不提供信息,您希望我们如何帮助您? – 2010-09-17 12:00:08

+1

@Alexandre Segfault – NullUserException 2010-09-17 12:04:44

+1

“对于x,弃用从字符串常量到'char *'”的转换;而是使用一个char数组:char x [] = ... – slashmais 2010-09-17 12:19:19

回答

11

变化

char *x="PM123BFD"; 

char x[]="PM123BFD"; 

不能修改字符串常量,所以不是传递功能的char阵列,它可以修改。

5

我不明白为什么它应该打破 - 我宁愿希望一个无限循环:在while条件将永远是真实和循环将永远不会被留下。

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

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

为什么strtrim_right返回一个字符指针,如果你不使用它? – jmtd 2010-09-17 12:18:13

+1

这段代码还有很多错误。循环中的while条件和代码仍然很复杂。 – 2010-09-17 12:21:38

+0

@jmtd:对,这个回报应该被删除。 – francogrex 2010-09-17 12:29:37

相关问题