如何访问指针结构中的字符串?
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
也可以这样使用。这里的问题是添加一种新语言需要更改整个数组,而不是仅仅添加一个新的。
我有一个结构:
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
也可以这样使用。这里的问题是添加一种新语言需要更改整个数组,而不是仅仅添加一个新的。