2011-07-14 39 views
0

我無法從除主函數之外的其他文件返回指向字符數組的指針。它總是說「分段錯誤」。但是,如果我在與main相同的文件中編寫函數,則沒有問題。返回指向除主函數之外的其他文件中的函數的字符數組的指針

/* this is in mainfunc.c file*/ 
int main() 
{ 


    char ch[5]={'a','b','c','d','\0'}; 
    char *res=retchararray(ch); 
    printf("%s\n",res);/*I get segmentation fault only when I use this printf*/ 

} 

/* this function is in other file newfile.c */ 

char *retchararray(char *p){ 

    char *str; 
    str=p; 
    unsigned int len=strlen(p); 

    *(str+len)='e'; 
    *(str+len+1)='\0'; 

    return str; 

} 

我在Mac OS上使用netbeans做C編程。

可以請一些人告訴我是什麼問題?或者我在這裏犯了一些錯誤?

+1

我將'char ch [5]'更改爲'char ch [6]'以適應額外的'e'字符。 – Ram

回答

4

函數retchararray溢出你的數組。您使用的內存超過您保留的內存。 這發生在*(str+len+1) = '\0'並導致段錯誤。

+0

是的,我同意。但是,當retchararray函數與main相同的文件時,它工作正常。 – Loki

+2

@Loki:這是未定義的行爲,當它工作時你就是幸運的。 –

+0

@Blagovest Buyukliev:是的。因爲我一直在嘗試很多。我不明白髮生了什麼事。 – Loki