fgets
목록 에서 입력 문자열을 저장하는 프로그램을 만들고 있습니다. 최대 길이는 고정되어 있지만 더 짧을 수도 있습니다. 다음과 같이 저장합니다.
typedef char line[LINE_SIZE];
struct node{
line *t; //pointer and not just a variable so I can "detach" the allocation to do stuff
struct node *prev;
struct node *next;
};
그러나 내 프로그램 malloc(sizeof(line))
에서는 최대 고정 길이를 가진 배열을 수행합니다.
제 질문은 malloc( strlen( str ) + sizeof( ( char )'\0' ) )
필요한 메모리 만 정확하게 사용하는 것과 같은 것을 할당한다면 어떻게 지적 할 수 있습니까?
구조체 char*
내부를 사용해도 괜찮 node
습니까? 내가 위험을 감수합니까?
구조체 내부의 유연한 배열에 대해 들었지만 프로그램을 분리하고 다른 포인터로 가리킬 수 있어야하기 때문에 배열을 구조체 내부에 직접 배치하고 싶지 않습니다.
malloc()
할당 한 주소를 반환하면 반환 값을 변수에 할당하고 가리킬 수 있습니다. 변수가 구조체의 동일한 멤버 인 경우에도 항상 최대 또는 동일한 메모리 크기를 할당 할 필요는 없습니다.
char* line=malloc(strlen(str)+1); // +1 for null terminate
strcpy(line, "This is a str"); // points the memory of returned
char*
구조체에서 사용하는 것은 절대적으로 좋습니다. struct의 멤버를 일반 변수처럼 취급하십시오.
struct node
{
char* t;
struct node* prev;
struct node* next;
}
node n;
n.t = malloc(strlen(str) + 1); // it's fine.
strcpy(n.t, "This is a node"); // using the memory you allocated above
n.prev = n.next = NULL;
... // doing some processing
free(n.t); // don't forget to call free() when you're done using the memory.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다