よし、これで行く。here で説明されているように、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.
私が考えることができる2つの考えられる原因は、私のループが正しくないか、私には意味がないか、初期化が何らかの形で間違っていることです。ただし、このサイトや一般的に Google で検索しても役に立ちませんでした。私は他のソリューションにもオープンですが、なぜこれがうまくいかないのかにも興味があります.
ありがとう!