C:使用字符串数组初始化结构体
问题描述:
我试图执行以下操作,但编译器抱怨括号,但是,我无法找到替代方法。C:使用字符串数组初始化结构体
struct cards {
char faces[13][6], suits[4][9];
}
typedef struct cards cards;
void init_struct(cards *s) {
s->suits = {"hearts","spades","clubs","diamonds"};
s->faces = {"ace","two","three","four","five",
"six","seven","eight","nine"
"ten","jack","queen","king"};
}
我意识到有几个可能的重复线程在那里,但没有一个让我在赛道上。我希望你们中的一个能够:)谢谢
答
直接初始化语法只能用于初始化,而不能分配。你不能这样做,例如:
char p[2][5];
p = {"a", "b"}; //error
这就是为什么它无法编译。通过串
strcpy(s->suits[0], "hearts");
strcpy(s->suits[1], "spades");
...etc
尝试strcpy
-ing串,或者初始化一个临时数组,然后将其复制
char suits_tmp[4][9] = {"hearts","spades","clubs","diamonds"};
memcpy(s->suits, suits_tmp, 4*9);
答
使用const char *
内的struct
(我假设没有要求修改实际内容西装/面值),并分别初始化它们:
struct cards {
const char *suits[4];
const char *faces[13];
};
typedef struct cards cards;
void init_struct(cards *s)
{
s->suits[0] = "hearts";
s->suits[1] = "spades";
s->suits[2] = "clubs";
s->suits[3] = "diamonds";
s->faces[0] = "ace";
s->faces[1] = "two";
s->faces[2] = "three";
s->faces[3] = "four";
s->faces[4] = "five";
s->faces[5] = "six";
s->faces[6] = "seven";
s->faces[7] = "eight";
s->faces[8] = "nine";
s->faces[9] = "ten";
s->faces[10] = "jack";
s->faces[11] = "queen";
s->faces[12] = "king";
}
当然,如果你只是想一次性套卡,这是合理的,那么这将工作:
struct
{
const char *suits[4];
const char *faces[13];
} cards =
{
{"hearts","spades","clubs","diamonds"},
{"ace","two","three","four","five",
"six","seven","eight","nine",
"ten","jack","queen","king"}
};
答
#include <string.h>
#include <stdio.h>
struct cards {
const char** suits;
const char** faces;
};
typedef struct cards cards;
const char* suits[4] = {"hearts","spades","clubs","diamonds"};
const char* faces[13] = {"ace","two","three","four","five",
"six","seven","eight","nine"
"ten","jack","queen","king"};
int main()
{
cards deck;
deck.suits = suits;
deck.faces = faces;
printf(deck.suits[0]);
return 0;
}
这工作也是如此。不使用指针。
澄清
我知道我是快速和肮脏的答案,但没有strcpy
或memcpy
或作业一长串。如果你的计划是为你的游戏使用标准的一副牌,那么无论如何它都会是一组不变的值。如果你的意图是有不同类型的套牌,那么我的答案可能不够。是的,它不具有init_struct
功能,但你可以很容易地修改它为你的意图(因为我没有很好地在C和malloc的精通。)
答
#include <string.h>
typedef struct cards {
char faces[13][6], suits[4][9];
} cards;
cards base_card = {
{"ace","two","three","four","five",
"six","seven","eight","nine", //forgot "," at nine after
"ten","jack","queen","king"},
{"hearts","spades","clubs","diamonds"}
};
void init_struct(cards *s) {
memcpy(s, &base_card,sizeof(cards));
}
感谢,尽管这是我很害怕,我必须做:) – kensing 2013-05-12 09:31:56
@remyabel你已经低估了我和Armen Tsirunyan究竟是什么原因?战术性下调了吗? – trojanfoe 2013-05-12 10:07:45