2013-05-12 60 views
3

我试图执行以下操作,但编译器抱怨括号,但是,我无法找到替代方法。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"}; 
} 

我意识到有几个可能的重复线程在那里,但没有一个让我在赛道上。我希望你们中的一个能够:)谢谢

回答

0

直接初始化语法只能用于初始化,而不能分配。你不能这样做,例如:

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); 
0

使用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"} 
}; 
+0

感谢,尽管这是我很害怕,我必须做:) – kensing 2013-05-12 09:31:56

+0

@remyabel你已经低估了我和Armen Tsirunyan究竟是什么原因?战术性下调了吗? – trojanfoe 2013-05-12 10:07:45

0
#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; 
} 

这工作也是如此。不使用指针。

澄清

我知道我是快速和肮脏的答案,但没有strcpymemcpy或作业一长串。如果你的计划是为你的游戏使用标准的一副牌,那么无论如何它都会是一组不变的值。如果你的意图是有不同类型的套牌,那么我的答案可能不够。是的,它不具有init_struct功能,但你可以很容易地修改它为你的意图(因为我没有很好地在C和malloc的精通。)

2
#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)); 
} 
+0

甚至比我的还好。 – 2013-05-12 09:36:32

+0

这怎么能工作?你正在将一个指向字符串的指针复制到一个字符数组中! – trojanfoe 2013-05-12 09:44:12

+0

@trojanfoe你会开玩笑吗? – BLUEPIXY 2013-05-12 09:46:37