- 제 2 판, 그들은 함수 strdup
따라서 정의 섹션 6.5 :K & R 섹션 6.5에서 기능 스트럿을 사용한 이유는 무엇입니까? <em>철도청에 의한 C 프로그래밍 언어</em>에서
char *strdup(char *s)
{
char *p;
p = (char *) malloc(strlen(s) + 1) /* +1 for the '\0' */
if (p != NULL)
strcpy(p, s);
return p;
}
사용법은 구조 tnode
의 멤버에 문자열을 복사하는 것입니다 따라서 정의 :
struct tnode *addtree(struct tnode *p, char *w)
{
...
p->word = strdup(w);
...
}
: 다음과 같이 호출
struct tnode {
char *word;
int count;
struct tnode *left;
struct tnode *right;
};
왜 우리는 대신 이런 식으로 사용할 수 없습니까?
strcpy(p->word, w);
strcpy를 문자 포인터 변수로 사용하기 전에 strdup 함수가 어딘가에 수행한다는 malloc()을 수행해야합니다. 단어는 유효한 메모리를 가리켜 야합니다. 처음 인스턴스화하면 어디든지 가리킬 수 있습니다. – Scooter
당신은 *을 *로 복사하고 있다고 생각합니까? "문자열을 구조체의 멤버에 복사"- 아니, 그게 뭐하는거야 ... 그 멤버는 배열이 아니라 포인터입니다. –
@Scooter 본질적으로 malloc()을 통한 명시적인 배후의 이유를 알고 싶었습니다. 나는 포인터 매개 변수의 선언이 관련 데이터 유형을위한 메모리를 할당한다는 인상 아래에 있었다. – Sohail