Strdup()不起作用

时间:2013-02-08 10:35:00

标签: c string strdup

可能这是非常基本的,每个人都会对我大喊大叫,但我一直试图解决这个问题几个小时,不能再忍受了。 我有这个结构

struct node
{
Key_Type element;
tree_ptr left, right;
};

我正试图用这样的strdup来表达元素:

newNode->element = strdup(word);

我知道它可能不起作用,因为我试图分配一个指向普通变量的指针,但我不知道如何解决这个问题。

Table insert(Key_Type word,Table root)
{ 
struct node *newNode = malloc(sizeof(struct node));
struct node *left = malloc(sizeof(struct node));
struct node *right = malloc(sizeof(struct node));
newNode = root->head;
//fprintf (stderr, "Hi\n");
while(newNode->element != NULL)
{
    //printf("%s",word);
    if(strcmp(word,newNode->element) == 0)
    {
        fprintf (stderr, "Hi\n");
        return root;
    }
    while(strcmp(word,newNode->element) == -1)
    {
        //fprintf (stderr, "Hi\n");
        newNode = newNode->left;
        //fprintf (stderr, "Hi\n");
    }//if
    //fprintf (stderr, "Hi\n");
    while(strcmp(word,newNode->element) == 1)
    {
            //fprintf (stderr, "Hi\n");
            newNode = newNode->right;
            //fprintf (stderr, "Hi\n");
    }//else if
}
//createNode(word);
newNode->element = strdup(word);
newNode->left = left;
newNode->right = right;
//fprintf (stderr, "Hi\n");
//printf("%s",root->head->element);
   return root;
}

1 个答案:

答案 0 :(得分:0)

根据@ unwind的回答,strdup()不是标准的C函数,只能在POSIX投诉系统上使用。您可能没有在系统中实施strdup

以下是strdup()

的可能实现方式
char *strdup(const char *c)
{
    char *dup = malloc(strlen(c) + 1);

    if (dup != NULL)
       strcpy(dup, c);

    return dup;
}