c - 链接外部静态结构数组无法正常工作

标签 c arrays struct extern static-array

我正在尝试链接一个静态定义的结构数组。我正在使用 extern 修饰符来这样做。当我打印出 extern 结构的内存地址时,它与它在可执行文件中的位置不同。

这是我的:

type.h:

typedef struct tableEntry {
     const char *my_str;
     void *my_addr;
     int myint;
} my_struct;

测试.c:

include "type.h"

my_struct my_array[] = {
    {"hello", (void*)15, 5000},
    {"world", (void*)15, 3000},
    {"abtest", (void*)15, 2000},
};

ma​​in.c:

#include <stdio.h>
#include "type.h"

extern my_struct* my_array;

int main() {
    printf("array location - %p\n", my_array);
    printf("array entry 1 myint - %d\n", my_array[0].myint);
    printf("array entry 1 address - %p\n", my_array[0].my_addr);
    printf("array string location - %p\n", &(my_array[0].my_str));
    printf("array string - %s\n", my_array[0].my_str);
}

我这样编译程序:

gcc test.c main.c

当我运行我的可执行文件时,我得到以下输出:

array location - 0x4006be
array entry 1 myint - 29811
array entry 1 address - 0x6574626100646c72
array string location - 0x4006be
Segmentation fault (core dumped)

my_array 在 nm 输出中的地址:

0000000000601060 D my_array

如您所见,我的输出不是我所期望的,并且 my_array 未正确链接(nm 输出中的位置与实际程序打印的位置不同)。

注意:我不能在我的 main.c 中包含 test.c 文件。它必须是链接的。

最佳答案

改变

extern my_struct* my_array;

extern my_struct my_array[];

您不能使用 extern 将数组修改为指针。

关于c - 链接外部静态结构数组无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30673243/

相关文章:

struct - 如何在不出现 "use moved value"错误的情况下绑定(bind)盒装结构的多个字段?

python - 使用 struct.unpack VS np.frombuffer VS np.ndarray VS np.fromfile 解压二进制文件

c - C 中不带分支的 double 或集合整数

c - 如果对于 &*x 不评估 * 和 &,那么为什么不对 *&x 采用相同的规则呢?

c - %ms 和 %s scanf 之间的区别

arrays - 为什么 Lucene 使用数组而不是哈希表作为倒排索引?

c# - 使用正确的编码读取固定的字符数组

c - 如何在 C 中将包含 UTF-8 十六进制值的字符串转换为 wchar?

JavaScript - 为淘汰赛创建数组

c# - 如何在运行时知道属于结构体的 char 数组的长度