2013-05-12 5 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"}; 
} 

거기에는 몇 가지 가능한 중복 스레드가 있다는 것을 알고 있지만 그 중 아무도 나를 트랙으로 안내하지 않았습니다. 나는 당신이 할 수 있기를 바랍니다 :) Thanks

답변

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 (I 실제 내용을 수정 할 필요가없는 가정 소송/액면가의 개별 항목)을 선택하고 개별적으로 초기화하십시오.

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

덕분에, 즉, 비록 내가 두려워 I 있다는 것을 해야만 했어 :) – kensing

+0

@remyabel 당신은 나와 Armen Tsirunyan을 둘 다 downvoted했습니다. 전술 하향식입니까? – trojanfoe

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

. 포인터를 사용하지 않습니다.

대한 설명

나는 나의이 신속하고 더러운 답을 알고 있지만 strcpy 또는 memcpy 또는 과제의 긴 목록이 없습니다. 당신의 계획이 당신의 게임에 표준 카드 덱을 사용한다면, 어쨌든 일정한 가치의 세트가 될 것입니다. 당신의 의도가 다른 유형의 덱을 갖는 것이라면 나의 대답이 적절하지 않을 수 있습니다. 예, 그것은 init_struct 기능이 없습니다,하지만 당신은 쉽게 당신의 목적을 위해 그것을 수정할 수 있습니다 (I 잘 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

내 것보다 훨씬 낫다. –

+0

어떻게 작동합니까? 문자열에 대한 포인터를 문자 배열에 복사하고 있습니다! – trojanfoe

+0

@ 트로이안 호우 농담 해 줄래? – BLUEPIXY