2014-03-19 3 views
0

구조체에 char 변수를 작성했습니다. 메서드 내에서 사용할 때 문자열 값을 할당 한 다음 인쇄하려고합니다. 나는 주변을 둘러 보았지만 유효한 답을 찾을 수는 없지만 내가 잘못하고있는 것을 발견 할 수는 없다. 왜 아래 오류가 발생합니까? 여기 구조체 멤버에 변수 할당

내가 시도 것입니다 :

request for member 'val' in something not a structure or union 
+0

포인터이므로'-''not'.'을 사용해야합니다. –

+0

또한 "% s"대신 "% c"를 사용해야합니다 - "% s"은 NULL로 끝나는 문자 배열에 대한 포인터를 기다리고 있습니다. "% s"에 문자를 입력하면 printf는 그 문자를 충돌하거나 출력 할 포인터로 취급합니다. – thisisdog

+0

나는 편집을했다. char * val을 써야한다. – JustBlossom

답변

2

new_node이 포인터로 접근해야하지 인스턴스 :

struct node{ 
    char *val; 
    struct node *first; 
    struct node *last; 
}; 


void main(){ 
     struct node *new_node; 
new_node =(struct node *)malloc(sizeof(struct node)); 
    new_node.val = "a"; 
    printf("%s",new_node.val); 
} 

나는 오류가 발생합니다.

  1. *val 메모리를 할당 : new_node->val=(char*)malloc(sizeof(char))
  2. 할당이 필요합니다 추가 처리가 필요합니다 대신에 당신이 char *valchar val에서 변경으로 편집 된 질문 에 new_node.val

    응답의 new_node->val 시도 포인터를 역 참조 : *(new_node->val)="a"

  3. 인쇄 성명 또한 포인터 역 참조 D : printf("%c",*(new_node->val))
  4. 당신이 new_node를 해제하기 전에 val 포인터를 해제해야합니다 free(new_node->val)
+0

과 같은 메소드가 없습니다. 현재 문제를 해결하면 추가 오류가 발생합니다. 문자를 표시 할 때는 '% c'를 사용하고 문자열을 표시하려면 '% s'을 사용하십시오. (문자로 구성된 널 문자로 끝나는 문자) – Suryavanshi

+1

데이터에 문자열을 지정할 때주의하십시오. malloc newnode -> val (strlen +1 사용) 그리고 나서 strcpy를 사용하여 할당하십시오. 그런 다음 % s (으)로 인쇄하는 데 문제가 없습니다. – Inox

0

new_node.val는 new_node-> 발로 교체해야합니다. new_node는 포인터이기 때문에. new_node-> val (종종 화살표 연산자라고도 함)은 (* new_node) .val의 줄임말입니다.

또한 난 당신이 쓸 수 있다고 생각 :

node *new_node = malloc(sizeof(node)); 

가 쉽게 읽고 청소기 코드의 경우 malloc에 ​​있기 때문에 단지 주어진 메모리 주소에 대한 포인터를 반환합니다. 프로그램을 컴파일 할 때 논리적 오류 또는 오류를 덜 경험할 때 -Wall 또는 기타 경고 플래그를 사용하십시오.

관련 문제