在我的项目中,系统要求我将2D单词数组存储在动态数据结构中,然后将其用于其他功能以用于其他目的,但是我感到困惑,我该怎么做。我确实知道如何命名它们,例如:
#include <stdio.h>
#include <stdlib.h>
typedef struct Names {
char *name[5];
} Names;
void func(Names y) {
printf("%s\n%s", y.name[0], y.name[1]);
}
int main()
{
Names y;
y.name[0] = "John";
y.name[1] = "Luke";
func(y);
return 0;
}
但是,如果我想将其作为2d数组怎么办?所以通常我会这样做,char names[][10] = {"John", "Luke", etc..};
但是如何将其存储在结构中?我的意思是如果我做到了
#include <stdio.h>
#include <stdlib.h>
typedef struct Names {
char *name[5][10];
} Names;
void func(Names y) {
printf("%s\n%s", y.name[0], y.name[1]);
}
int main()
{
Names y;
y.name[][10] = {"John", "Luke"};
func(y);
return 0;
}
那只会带来错误,没有任何意义。
这是做它的正式方法(见嵌套初始化中:struct和union初始化):
#include <stdio.h>
typedef struct Names {
const char *name[2][2];
} Names;
void func(Names* y) {
printf("%s, %s\n", y->name[0][0], y->name[0][1]);
printf("%s, %s\n", y->name[1][0], y->name[1][1]);
}
int main()
{
Names y = { .name={{"John", "Luke"}, {"Jack", "Jim"}}};
func(&y);
return 0;
}
另外,出于支持backwords-compatibility的原因,以下工作:
#include <stdio.h>
typedef struct Names {
const char *name[2][2];
} Names;
void func(Names* y) {
printf("%s, %s\n", y->name[0][0], y->name[0][1]);
printf("%s, %s\n", y->name[1][0], y->name[1][1]);
}
int main()
{
Names y = {"John", "Luke", "Jack", "Jim"};
func(&y);
return 0;
}
上面是管理存储在const char
指针中的字符串常量,对于最长为9 char
s ghtgh且带有结尾零终止符的可变字符串,可能会发生以下类似的情况(我为5和9设置了编译时常量):
#include <stdio.h>
enum {
NAME_COUNT = 5,
NAME_LENGTH = 9
};
typedef struct Names {
char name[NAME_COUNT][NAME_LENGTH+1];
} Names;
void func(Names* y) {
for (int i=0; i<NAME_COUNT; ++i) {
printf("%s\n", y->name[i]);
}
}
int main()
{
Names y = { .name={"John", "Olivia", "Luke", "Mary", "Jane" }};
func(&y);
return 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句