如何通过结构访问 char* 的二维数组?
How to access to 2D array of char* through structure?
这是一个 char* 的二维数组,例如存储不同语言的不同字符串:
typedef enum
{
FRENCH,
ENGLISH,
GERMAN,
LANGUAGES_COUNT
} languages_t;
typedef enum
{
HELLO,
THANK_YOU,
WORDS_COUNT
} words_t;
char *text_tab[WORDS_COUNT][LANGUAGES_COUNT] =
{
{"bonjour", "hello", "guten tag"},
{"merci", "thank you", "danke"}
};
访问它没有问题:
int main()
{
printf("%s\n", text_tab[HELLO][ENGLISH]);
printf("%s\n", text_tab[THANK_YOU][FRENCH]);
printf("%s\n", text_tab[HELLO][GERMAN]);
return 0;
}
现在,我不想直接访问text_tab,而是通过一个结构:
typedef struct
{
int a;
char ***txt; // here is not working
} test_t;
test_t mystruct = {5, text_tab};
想法是这样访问 text_tab :
printf("%s\n", mystruct.txt[BONJOUR][ANGLAIS]);
printf("%s\n", mystruct.txt[MERCI][FRANCAIS]);
printf("%s\n", mystruct.txt[BONJOUR][ALLEMAND]);
如何在结构中声明字段“txt”?
我只使用静态分配,我不想在“txt”中复制“text_tab”的内容,只需使用指针即可。
谢谢。
这个数组
char *text_tab[WORDS_COUNT][LANGUAGES_COUNT] =
{
{"bonjour", "hello", "guten tag"},
{"merci", "thank you", "danke"}
};
具有类型 char * [WORDS_COUNT][LANGUAGES_COUNT]
。
因此指向数组元素的指针具有类型 char * ( * )[LANGUAGES_COUNT]
因此结构可以这样声明
typedef struct
{
size_t a;
char * ( *txt )[LANGUAGES_COUNT];
} test_t;
并且在 main 中你可以声明一个结构类型的对象,如
test_t mystruct = { sizeof( text_tab ) / sizeof( *text_tab ), text_tab };
这是一个演示程序。
#include <stdio.h>
#define WORDS_COUNT 2
#define LANGUAGES_COUNT 3
typedef struct
{
size_t a;
char * ( *txt )[LANGUAGES_COUNT];
} test_t;
int main(void)
{
char *text_tab[WORDS_COUNT][LANGUAGES_COUNT] =
{
{"bonjour", "hello", "guten tag"},
{"merci", "thank you", "danke"}
};
test_t mystruct = { sizeof( text_tab ) / sizeof( *text_tab ), text_tab };
for ( size_t i = 0; i < mystruct.a; i++ )
{
for ( size_t j = 0; j < sizeof( *mystruct.txt ) / sizeof( **mystruct.txt ); j++ )
{
printf( "%s ", mystruct.txt[i][j] );
}
putchar( '\n' );
}
return 0;
}
程序输出为
bonjour hello guten tag
merci thank you danke
这是一个 char* 的二维数组,例如存储不同语言的不同字符串:
typedef enum
{
FRENCH,
ENGLISH,
GERMAN,
LANGUAGES_COUNT
} languages_t;
typedef enum
{
HELLO,
THANK_YOU,
WORDS_COUNT
} words_t;
char *text_tab[WORDS_COUNT][LANGUAGES_COUNT] =
{
{"bonjour", "hello", "guten tag"},
{"merci", "thank you", "danke"}
};
访问它没有问题:
int main()
{
printf("%s\n", text_tab[HELLO][ENGLISH]);
printf("%s\n", text_tab[THANK_YOU][FRENCH]);
printf("%s\n", text_tab[HELLO][GERMAN]);
return 0;
}
现在,我不想直接访问text_tab,而是通过一个结构:
typedef struct
{
int a;
char ***txt; // here is not working
} test_t;
test_t mystruct = {5, text_tab};
想法是这样访问 text_tab :
printf("%s\n", mystruct.txt[BONJOUR][ANGLAIS]);
printf("%s\n", mystruct.txt[MERCI][FRANCAIS]);
printf("%s\n", mystruct.txt[BONJOUR][ALLEMAND]);
如何在结构中声明字段“txt”? 我只使用静态分配,我不想在“txt”中复制“text_tab”的内容,只需使用指针即可。
谢谢。
这个数组
char *text_tab[WORDS_COUNT][LANGUAGES_COUNT] =
{
{"bonjour", "hello", "guten tag"},
{"merci", "thank you", "danke"}
};
具有类型 char * [WORDS_COUNT][LANGUAGES_COUNT]
。
因此指向数组元素的指针具有类型 char * ( * )[LANGUAGES_COUNT]
因此结构可以这样声明
typedef struct
{
size_t a;
char * ( *txt )[LANGUAGES_COUNT];
} test_t;
并且在 main 中你可以声明一个结构类型的对象,如
test_t mystruct = { sizeof( text_tab ) / sizeof( *text_tab ), text_tab };
这是一个演示程序。
#include <stdio.h>
#define WORDS_COUNT 2
#define LANGUAGES_COUNT 3
typedef struct
{
size_t a;
char * ( *txt )[LANGUAGES_COUNT];
} test_t;
int main(void)
{
char *text_tab[WORDS_COUNT][LANGUAGES_COUNT] =
{
{"bonjour", "hello", "guten tag"},
{"merci", "thank you", "danke"}
};
test_t mystruct = { sizeof( text_tab ) / sizeof( *text_tab ), text_tab };
for ( size_t i = 0; i < mystruct.a; i++ )
{
for ( size_t j = 0; j < sizeof( *mystruct.txt ) / sizeof( **mystruct.txt ); j++ )
{
printf( "%s ", mystruct.txt[i][j] );
}
putchar( '\n' );
}
return 0;
}
程序输出为
bonjour hello guten tag
merci thank you danke