2012-02-21 66 views
1

我想用外部字符數組大小說50EXTERN陣列,如何使用

我有extern.h

extern char arr[50]; 

我有交流轉換器我在哪裏訪問arr

和我有b.c這是我的驅動程序文件。

我也有功能有啊的定義在AC

在我的驅動程序文件

現在BC我有

#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] 
} 

這給了我賽格故障。

我是否包括文件的權利,以及我在extern.h和b.c中聲明的外部變量是正確的。

是什麼導致seg故障?

+1

不要在bc(main())中包含extern.h:arr []被定義爲「兩次」,一個用extern,另一個不用extern ... extern wins,所以arr []是不與分配的數組靜態關聯。 – ydroneaud 2012-02-21 12:20:22

+0

@ydroneaud「外部勝利」怎麼樣?數組聲明「勝利」,否則你會有鏈接錯誤。問題必須在其他地方(例如* printf *的不正確使用)。 – 2013-11-03 01:21:02

回答

0

你使用的方式沒有問題extern

如果b.c中的聲明extern將隱藏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