我正在尝试链接静态定义的结构数组。我正在使用 extern 修饰符来做到这一点。当我打印出我的 extern 结构的内存地址时,它与它在可执行文件中的位置不同。
这是我所拥有的:
类型.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},
};
主.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)
nm 输出中 my_array 的地址:
0000000000601060 D my_array
如您所见,我的输出不是我所期望的,并且 my_array 没有正确链接(nm 输出中的位置与实际程序打印的位置不同)。
注意:我不能在 main.c 中包含 test.c 文件。它必须是链接的。