2009-11-19 8 views
0

변수를 사용하여 구조체를 초기화하는 방법은 무엇입니까?변수에 배열이있는 구조체 초기화

MyStruct test = {"hello", 2009}; 

을하지만이 버전은 도청되고 :

이 버전은 잘 작동

char str[] = "hello"; 
MyStruct test = {str, 2009}; 
+0

'typedef struct MyStruct {...} MyStruct;'의 정의를 게시하면 도움이됩니다. –

답변

3

당신은 C에서 배열을 할당 할 수 없습니다, 그래서 불행하게도 직접 ​​그렇게 할 수있는 방법이 없습니다. 하지만 strcpy를 사용하여 데이터를 복사 할 수는 있습니다.

typedef struct { 
    char name[20]; 
    int year; 
} MyStruct; 

int main() { 
    MyStruct a = { "hello", 2009 }; // works 

    char s[] = "hello"; 
    MyStruct b = { "", 2009 }; // use dummy value 
    strcpy(b.name, s); 

    return 0; 
} 
+0

가능한 경우 strlcpy() 또는 strncpy_s()를 사용합니다. strncpy()는 준 최후의 수단입니다. strcpy()는 오버플로가 일어나지 않고, 울부 짖는 것처럼 느껴진다. – asveikau

+0

좋은 지적. 표준이기 때문에 strcpy를 추천했습니다. 그는 이미 그것을 보았을 것입니다. 그리고 그는 그것을 가질 것이 확실합니다. –

+0

고마워요, 로저 페이트! – Doug

1

MyStruct의 정의 입력 char const *의 제 부재를 포함한다.

+0

MyStruct의 정의에 char 포인터 (또는 더 나은 'const char *')가 포함 된 경우에는 두 번째 이니셜 라이저가 올바르게 작동합니다. –

관련 문제