2013-09-06 3 views
1

에 문자 배열을 참조하는 나는 키에 널 종료 문자에 대한 여분의 바이트와 8 바이트 키가 있습니다.C 언어 : 중첩 된 구조체

struct KEY { char k[9]; }; 

키가 4 개 있습니다.

struct KEYS { struct KEY uk[4]; }; 

나는 akeys 이들과 포인터를 선언

struct KEY akey; 
struct KEYS akeys; 
struct KEYS * pkeys = &akeys; 

내가 포인터 pkeys를 사용하여 akeys에있는 모든 키를 제로화합니다. 내가 시도 다음 : 내가 키 메모리의 블록을 malloc을 계획,하지만이 간단한 예제가 동작하지 않습니다

struct KEY zerokey; 
strcpy(zerokey.k, "00000000"); 
for (i = 0; i < 4; i++) { 
    pkeys->uk[i] = zerokey;  
    printf("key=%s", pkeys->uk[i]); //error: crashes program 
    } 

.

왜 실패인가? 이 작업을 수행하는 더 좋은 방법이 있습니까? 이 작업을 수행하는 가장 좋은 방법은 내 구조체입니까? 키를 추가하고 KEYS 구조체에 대한 단일 포인터를 사용하여 키를 검색하고 싶습니다.

+0

char k [9]; 문자열에 9 바이트가 이미 할당되었습니다. 당신의 char * k를 선언 한 경우 [9] ;, 당신은, 포인터의 _array_이 문자열을 가리키는, 그리고 당신이 원하는 9 바이트 문자열의 많은 배열에 대한 포인터를 할당해야합니다. – ryyker

답변

0

이 구조체의 주요 유형입니다하지만 당신은 *의 printf의 유형, 대신 대신이 라인의 pkeys->uk[i].k

pkeys->uk[i] = zerokey;  
printf("key=%s", pkeys->uk[i]); 

이 라인

strcpy(pkeys->uk[i].k ,zerokey.k); 
printf("key=%s\n", pkeys->uk[i].k); 

을 사용하여 사용하는 문자 필요

:이 수정 된 코드를 사용해보십시오 - 당신은 키 malloc에 ​​블록 현재 KEY 정의가 길 필요가 없습니다, 구성원, 즉`나는 키 메모리 블록을 malloc을 계획,하지만 난 work`이 간단한 예제를 얻을 수 없습니다에 관한 554,573,210
3

pkeys->uk[i]struct KEY 아닌 포인터이다. 값으로 전체 구조체를 printf에 전달하고 있습니다.이 구조체는 아마도 포인터로 해석하려고 시도했을 것입니다 (잘못된 결과 포함).

가 포함 char 어레이에 대한 포인터를 전달

printf("key=%s\n", pkeys->uk[i].k); 

보십시오. 당신은 pkeys->uk[i] 사용하는

관련 문제