2011-07-14 7 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

余分な 'e'文字に対応するために 'char ch [5]'を 'char ch [6]'に変更しました。 – Ram

答えて

4

関数retchararrayが配列をオーバーフローします。あなたは予約した以上のメモリを使います。 これは*(str+len+1) = '\0'で発生し、segfaultが発生します。

+0

ええ、私はそれに同意します。しかし、retchararray関数がmainと同じファイルにあるときはうまく動作します。 – Loki

+2

@ロキ:これは未定義の動作です。 –

+0

@Blagovest Buyukliev:そうかもしれない。私はたくさんの努力をしてきたからです。私は何が起こっているのか分かりません。 – Loki