在结构内初始化数组

诺伯特

在我的项目中,系统要求我将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 chars 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章