2015-02-07 4 views
0

qq4all. 이 같은 구문 구성 파서를 작성 - 나는 작업이 있습니다구조체에 데이터를 쓸 수 없습니다.

[module] 
name = first 
imitationType = first 

[module] 
name = second 
imitationType = second 

등 내가 꽤 설정 파서 발견 - inih을하지만, 내가 원하는대로 작동하도록 강제 할 수 없다. 그 라인에 대한

Error! Expression for '->' must be 'pointer to struct or union'

: :이 컴파일 할 때

typedef struct { 
    const char* name; 
    const char* imitation_type; 
} module_config; 

int module_count = 0; 

static int handler(void* user, const char* section, const char* name, 
        const char* value) 
{ 
    module_config* pconfig = (module_config*)user; 
    pconfig = (module_config *) malloc(module_count*sizeof(module_config)); 
    #define MATCH(s, n) strcmp(section, s) == 0 && strcmp(name, n) == 0 
    if (strcmp(section, "module") == 0) { 
     if (MATCH("module", "name")) { 
      pconfig[module_count]->version = strdup(value); 
     } else if (MATCH("module", "imitationType")) { 
      pconfig[module_count]->name = strdup(value); 
     } else { 
      return 0; /* unknown section/name, error */ 
     } 
    ++module_count; 
    pconfig = (module_config *) realloc(pconfig, module_count * sizeof(module_config)); 
} 

return 1; 
} 

는하지만, 나는 다음 오류가 발생합니다 :

pconfig[module_count]->version = strdup(value); 
pconfig[module_count]->name = strdup(value); 

내가 '여기 내 코드는 inih 예를 통해 writed m 초보자가 프로그래밍에서 이해하지 못하는 이유는 무엇입니까? 제발 도와주세요 :-)

답변

1

pconfig는 module_config 구조체의 인스턴스에 대한 포인터입니다.

이 포인터에서 pconfig [module_count]를 사용하면 (pconfig+module_count) 포인터를 역 참조하는 것과 같습니다. 즉 *(pconfig+module_count)과 같습니다.

따라서 pconfig[module_count]은 더 이상 포인터가 아닙니다. pconfig[module_count].version 또는 (pconfig+module_count)->version을 사용해야합니다.