2012-06-27 5 views
0

쉬운 질문 ... 나는 많은 가치를 미리 알고 있고, 나중에 다른 것을 추가 할 필요가 있지만 왜이 라인에서 컴파일하지 않습니까? direc [i] = {L "짐", L "스미스"}; " 내가 그 값을 어디에서 알고 있는가?문자와 그 배열을 가진 미리 채우기 구조

struct NARRAY 
{ 
TCHAR *sFName; 
TCHAR *sLName; 
}; 

void main() 
{ 
struct NARRAY direc[1000]; 

DWORD i = 0; 

direc[i].sFName = calloc(512,sizeof(TCHAR)); 
direc[i].sLName = calloc(512,sizeof(TCHAR)); 

direc[i] = {L"Jim",L"Smith"}; 

} 
+0

당신은 그것을위한 프로그래밍 언어로 질문을 태그 할 수 있습니다. –

답변

1

변수를 선언 할 때만 허용되는 구조/배열 초기화를 사용하려고합니다. 물론

direct[i].sFname = L"Jim"; 
direct[i].sLname = L"Smith"; 

, 동적 (내 위의 예에서와 같이) 정적 배열의 일부 항목에 대해 다음 멤버를 할당하고, 경우 일부 항목에 대해, 당신은 정말 방법이 없다 : 당신은 그 자체로 각 멤버를 초기화해야 어떤 것이 동적으로 할당 되었는가를 아는 것, 당신이 그 포인터들을 자유롭게 할 때 문제가 될 수있다. 그런 다음 (TCHAR 또는 오히려, _tcsdup) strdup를 사용할 수 있습니다

direct[i].sFname = _tcsdup(L"Jim"); 
direct[i].sLname = _tcsdup(L"Smith"); 
1

클래식 C에는 구조체 상수가 없습니다. 변수를 초기화 할 때만 (즉 정의의 일부로)이 구문을 사용할 수 있습니다.

그러나, C99은 그렇게처럼 쓸 수있는 것이다, compound literals 소개 :

당신은 할당 된 메모리에 데이터를 복사 할 memcpy 또는 strncpy 등의 기능을 사용할 필요가
direc[i] = ((struct NARRAY) { L"Jim", L"Smith" }); 
+0

복합 리터럴이 작동하지 않습니다. b/c MSVC를 사용하고 있습니다. :( – JeffR

0

.

memcpy(direc[i].sFName, "Jim", 3); 
direct[i].sFName[3] = '\0';