好了,就到这里吧。我正在尝试在 C 中切换字符串值,如此处所述。但是,结构数组似乎没有正确初始化。我的(简化的)程序如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BADKEY -1
#define VALUE 1
#define OTHERVALUE 2
#define FOOVALUE 3
#define NREQKEYS (sizeof(lookuptable)/sizeof(symstruct_t))
typedef struct {
char *key;
int val;
} symstruct_t;
static symstruct_t lookuptable[] = {
{ "some value here", VALUE },
{ "other value", OTHERVALUE },
{ "yet another one", FOOVALUE }
};
int main(void) {
// Testing...
int i;
for (i = 0; i < NREQKEYS; i++) {
symstruct_t *sym = lookuptable + i * sizeof(symstruct_t);
printf("%d: key = '%s', val = %d.\n", i, sym->key, sym->val);
}
}
test.c
然后,我在Debian Jessie(目前正在测试)上编译上述程序如下(显然是保存在其中)。gcc 的版本是gcc version 4.7.2 (Debian 4.7.2-5)
. 编译不会给出警告或错误。
gcc test.c -o test -std=gnu99
现在,我希望这个简单的程序简单地打印出我初始化数组的值。但是,输出是这样的:
$ ./test
0: key = 'some value here', val = 1.
1: key = '(null)', val = 0.
2: key = '(null)', val = 0.
我能想到的两个可能原因是我的循环不正确,这对我来说毫无意义,或者初始化在某种程度上是错误的。然而,在谷歌上搜索这个网站并没有帮助我。我也对其他解决方案持开放态度,但也对为什么这不起作用感兴趣。
谢谢!