[英]C: initializing struct with an array of strings
我正在嘗試執行以下操作,但編譯器正在抱怨括號,但是,我無法找到替代方法。
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"};
}
我意識到有幾個可能的重復線程,但沒有一個讓我在軌道上。 我希望你們其中一個可以:)謝謝
#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));
}
直接初始化語法只能用於初始化,而不能用於賦值。 你不能這樣做,例如:
char p[2][5];
p = {"a", "b"}; //error
這就是它無法編譯的原因。 嘗試strcpy
-ing string by string
strcpy(s->suits[0], "hearts");
strcpy(s->suits[1], "spades");
...etc
或者,初始化臨時數組然后復制它
char suits_tmp[4][9] = {"hearts","spades","clubs","diamonds"};
memcpy(s->suits, suits_tmp, 4*9);
在你的struct
使用const char *
(我假設不需要修改套裝/面值的實際內容)並單獨初始化它們:
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。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.