gpt4 book ai didi

c - 带有指针的 extern 关键字无法传递正确的值

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:56 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com