我正在使用 extern 在两个 C 文件之间传递值:
//For the first case as follows: I was not able to print out correct values.
//Everything print out is 0.
//In file1.c,
int * element_list;
void set_element()
{
......
element_list = malloc(4 * sizeof(int));
for (i = 0; i < 4; i++) {
element_list[i] = i;
}
......
}
//In file2.c,
extern int * element_list;
void print_element()
{
......
for (i = 0; i < 4; i++) {
printf("%d", element_list[i]);
}
....
}
如果我像这样将 element_list 初始化为数组,我就能打印出正确的值。
// After changing the following two lines in two files,
// I was able to print out correct values
//In file1.c, change to
int element_list[MAX_NUM_ELEMENTS];
//In file2.c, change to
extern int element_list[MAX_NUM_ELEMENTS];
我不明白为什么使用 malloc 会导致这个问题。在打印出来之前我没有将元素重置为 0。在我的程序中,为了得到正确的结果,我只用数组替换了 malloc,程序中的其他一切都完全一样。
最佳答案
/* first file aaa.c */
extern void print_val();
int* element_list;
int num_elements = 10;
int main() {
int i;
element_list = malloc(num_elements * sizeof(int));
for (i = 0; i < num_elements; i++) {
element_list[i] = i;
}
print_val();
return 0;
}
请注意,我在主函数中调用了 print_val() 函数,以确保我调用的是文件 bbb.c 中的外部函数
/* Second file bbb.c */
extern int *element_list;
void print_val()
{
int j;
for(j = 0; j < 10; j++) {
printf("val = %d\n", element_list[j]);
}
}
要在 Linux 机器上编译它,请使用:
gcc aaa.c bbb.c -o output
然后运行它,我得到了以下信息:
ccampes@campes tmp $ ./output
val = 0
val = 1
val = 2
val = 3
val = 4
val = 5
val = 6
val = 7
val = 8
val = 9
我认为您编译它的方式可能是错误的。 我希望这可以解决您的问题。
关于c - 带有指针的 extern 关键字无法传递正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32596098/