0

おそらくそれは非常に基本的で、誰もが私に向かって叫ぶでしょうが、私はそれを何時間も修正しようとしていて、もうそれを受け入れることができません。私はこの構造を持っています

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;
}
4

1 に答える 1

1

@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;
}
于 2013-02-08T10:51:33.617 に答える