2012-02-21 1 views
1

は私がextern.hエクスターナル・アレイは、使用方法を、私は外部文字配列を使用したい

extern char arr[50]; 

私はarrにアクセスしていますがa.cを持っている必要がありサイズ50

の言います。

と私はb.cというドライバファイルを持っています。

私は

#include"extern.h" 
#include"a.h" 
char arr[50]; 
int main() 
{ 
//call to function in a.c 
} 

を持っており、私の交流で、私はこれは私にワンセグを与える

#include"a.h" 
#include"extern.h" 
int function1() 
{ 
//accessing arr, say printing arr[1] 
} 

を持っbcのも、私はああ、私のドライバファイルに今すぐ交流

に関数の定義を持っています失敗。

私はファイル権利を含んでいますが、extern.hとb.cのexternal var宣言は正しいです。

segフォルトの原因は何ですか?

+1

()(メイン)BCでextern.hを含めないでください:[] ARRはEXTERNせずに、 "二回" に定義にexternと1、およびその他のです...のextern勝利を、[]であるARRので、割り当てられた配列に静的に関連付けられていません。 – ydroneaud

+0

@ydroneaud「extern wins」とはどうして?配列の宣言が "勝つ"、そうでなければリンケージエラーが発生します。問題は他の場所になければなりません(例えば、* printf *の使い方が間違っているなど)。 –

答えて

0

使用方法に問題はありませんexternです。

extern b.cの宣言がchar arr[50];宣言を隠すと、リンケージエラーが発生します。

extern char arr[50]; 
char arr[50]; 
int main() { 
    //call to function in a.c 
} 

問題は他の場所で発生する必要があります。多分printfが使われていますか?

printf("%c\n", arr[1]); // works 
printf("%s\n", &arr[1]); // may cause a seg fault depending on arr content 
関連する問題