0

私はこの基本的なリンクリスト構造を持っています:

struct node
{
    char *name;
    float salary;
    struct node *nextNode;
};

struct list
{
    struct node *firstNode;
};

これは私のinsert機能です:

void insert(struct list *pList, char *newName, float newSalary)
{
    struct node *newNode;
    newNode = (struct node *)malloc(sizeof(struct node));

    newNode->salary = newSalary;
    newNode->name = newName;

    if (pList->firstNode == NULL)
    {
        pList->firstNode = newNode;
        newNode->nextNode = NULL;
    }

    else
    {
        struct node *pos = pList->firstNode;
        for(; pos->nextNode; pos = pos->nextNode);
        pos->nextNode = newNode;
        newNode->nextNode = NULL;
    }

}

これは私のmain()です:

int main(void)
{
    struct list lst;
    struct list *plst = &lst;

    createList(plst); //initializes the list

    char name1[] = "John";
    char name2[] = "Thomas";
    char name3[] = "Albert";

    insert(plst, name1, 1000);
    insert(plst, name2, 2000);
    insert(plst, name3, 3000);
}

char配列の転送を除いて、すべてがうまく機能します。char配列を渡す最良の方法は、char配列の最初のcharへのポインターを渡すことだと思いましたが、何が間違っていたのかわかりません。

また、最初に new を作成してから、これへのnodeポインタを関数に渡す方がよいでしょうか? それは似ていますが、おそらくより受け入れられますか?nodeinsert

4

2 に答える 2

2
newNode->name = newName;

これは、c-string をコピーする正しい方法ではありません。strcpyまたはを使用strncpy:

strcpy(newNode->name,newName);

@Pablo が指摘したように、文字列にメモリを割り当てていないため、最初に割り当ててからコピーします。

newNode->name = malloc(strlen(newName)+1);
strcpy(newNode->name,newName);
于 2012-09-29T11:38:25.427 に答える
0

コードは私には問題ないようです。しかし、char配列の転送を除いて、うまく機能するとはどういう意味ですか? エラー、segfault、予期しない何かが発生しましたか? もしそうなら何をしますか?

于 2012-09-29T11:39:15.657 に答える