2010-09-17 209 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

相關問題