如何访问指针结构中的字符串?

How to access a string in a struct of pointers?

我有一个结构:

struct dispPara
{   
    char *english,   
    char *french,
    void            *value;             
    unsigned char    type;          
    unsigned char    units;                 
};

struct dispPara dispParas[5] =
{

 {"abc_english", "xyz_frnch", &blah, blah, blah},

 {"english",  "frnch", &blah, blah, blah},

}

我正在访问英文字符串:dispParas[i].english。现在,默认是英语字符串,如果有人将语言更改为法语,指针应该打印法语。如何使用指针访问法语字符串?

谢谢。

不清楚你到底想要什么。但是如果是为了国际化,你做错了,因为你不能索引到 struct.

相反,您应该为每种语言(包含所有字符串)使用 const char *[] 和指向当前语言数组的 const char **。 该字符串将是 current_language[text_index].

当然,数组必须在同一索引处具有相同的含义。更清楚地说,您应该为每个文本使用 enum 而不是数字索引:

const char *text_english[] = { "Hello", "World" };
const char *text_german[] = { "Hallo", "Welt" };

typedef enum {
    TEXT_HELLO = 0,
    TEXT_WORLD,
} TextCodes;

const char **current_language = text_english;

...

int main(void)
{
    printf("%s %s!", current_language[TEXT_HELLO], current_language[TEXT_WORLD]);
}

另一种方法是使用二维数组:

#define NUM_LANGUAGES 2

const char *text_strings[][NUM_LANGUAGES] = {
    { "Hello", "Hallo", },
    { "World", "Welt", },
};

...

size_t lang = 1; // german
printf("%s %s", text_strings[0][lang], text_strings[1][lang]);

上面的enums也可以这样使用。这里的问题是添加一种新语言需要更改整个数组,而不是仅仅添加一个新的。