구조체에 char 변수를 작성했습니다. 메서드 내에서 사용할 때 문자열 값을 할당 한 다음 인쇄하려고합니다. 나는 주변을 둘러 보았지만 유효한 답을 찾을 수는 없지만 내가 잘못하고있는 것을 발견 할 수는 없다. 왜 아래 오류가 발생합니까? 여기 구조체 멤버에 변수 할당
내가 시도 것입니다 :request for member 'val' in something not a structure or union
구조체에 char 변수를 작성했습니다. 메서드 내에서 사용할 때 문자열 값을 할당 한 다음 인쇄하려고합니다. 나는 주변을 둘러 보았지만 유효한 답을 찾을 수는 없지만 내가 잘못하고있는 것을 발견 할 수는 없다. 왜 아래 오류가 발생합니까? 여기 구조체 멤버에 변수 할당
내가 시도 것입니다 :request for member 'val' in something not a structure or union
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);
}
나는 오류가 발생합니다.
*val
메모리를 할당 : new_node->val=(char*)malloc(sizeof(char))
char *val
에 char val
에서 변경으로 편집 된 질문 에 new_node.val
응답의 new_node->val
시도 포인터를 역 참조 : *(new_node->val)="a"
printf("%c",*(new_node->val))
new_node
를 해제하기 전에 val
포인터를 해제해야합니다 free(new_node->val)
과 같은 메소드가 없습니다. 현재 문제를 해결하면 추가 오류가 발생합니다. 문자를 표시 할 때는 '% c'를 사용하고 문자열을 표시하려면 '% s'을 사용하십시오. (문자로 구성된 널 문자로 끝나는 문자) – Suryavanshi
데이터에 문자열을 지정할 때주의하십시오. malloc newnode -> val (strlen +1 사용) 그리고 나서 strcpy를 사용하여 할당하십시오. 그런 다음 % s (으)로 인쇄하는 데 문제가 없습니다. – Inox
new_node.val는 new_node-> 발로 교체해야합니다. new_node는 포인터이기 때문에. new_node-> val (종종 화살표 연산자라고도 함)은 (* new_node) .val의 줄임말입니다.
또한 난 당신이 쓸 수 있다고 생각 :node *new_node = malloc(sizeof(node));
가 쉽게 읽고 청소기 코드의 경우 malloc에 있기 때문에 단지 주어진 메모리 주소에 대한 포인터를 반환합니다. 프로그램을 컴파일 할 때 논리적 오류 또는 오류를 덜 경험할 때 -Wall 또는 기타 경고 플래그를 사용하십시오.
포인터이므로'-''not'.'을 사용해야합니다. –
또한 "% s"대신 "% c"를 사용해야합니다 - "% s"은 NULL로 끝나는 문자 배열에 대한 포인터를 기다리고 있습니다. "% s"에 문자를 입력하면 printf는 그 문자를 충돌하거나 출력 할 포인터로 취급합니다. – thisisdog
나는 편집을했다. char * val을 써야한다. – JustBlossom