在C編程語言通過KNR - 第2版,第6.5節,他們已經定義了一個函數strdup
這樣的:由此爲什麼他們在K&R部分6.5中使用函數strdup?
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 {
char *word;
int count;
struct tnode *left;
struct tnode *right;
};
這樣調用:
struct tnode *addtree(struct tnode *p, char *w)
{
...
p->word = strdup(w);
...
}
爲什麼我們不能使用這樣的東西?
strcpy(p->word, w);
您需要先完成malloc(),strdup函數才能將strcpy用於字符指針變量。單詞必須指向有效的記憶。當首次實例化它時,它可能指向任何地方。 – Scooter 2014-11-01 09:09:47
你認爲那是將*複製到*的位置? 「將一個字符串複製到一個結構的成員上」 - 不,這不是它正在做的......該成員是一個指針,而不是一個數組。 – 2014-11-01 09:19:30
@Scooter本質上,我想知道通過malloc()進行顯式分配的原因。我是(我)的印象是一個指針參數的聲明也爲相關數據類型分配內存。 – Sohail 2014-11-01 09:38:45