如何在C中传递char数组?

时间:2012-09-29 11:30:10

标签: c list

我有这个基本的链表结构:

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,但我看不出我做错了什么。

此外,首先创建新的node然后将指向此node的指针传递给insert函数会更好吗?它类似,但也许更容易接受?

2 个答案:

答案 0 :(得分:2)

newNode->name = newName;

这不是复制c字符串的正确方法。使用strcpystrncpy

strcpy(newNode->name,newName);

由于@Pablo指出你没有为字符串分配内存,所以先分配然后复制:

newNode->name = malloc(strlen(newName)+1);
strcpy(newNode->name,newName);

答案 1 :(得分:0)

代码对我来说似乎很好。但是除了转移char数组之外,的作用是什么意思?你得到一个错误,段错误,意外的事情,如果有的话?