我有这个基本的链表结构:
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
函数会更好吗?它类似,但也许更容易接受?
答案 0 :(得分:2)
newNode->name = newName;
这不是复制c字符串的正确方法。使用strcpy
或strncpy
:
strcpy(newNode->name,newName);
由于@Pablo指出你没有为字符串分配内存,所以先分配然后复制:
newNode->name = malloc(strlen(newName)+1);
strcpy(newNode->name,newName);
答案 1 :(得分:0)
代码对我来说似乎很好。但是除了转移char数组之外,的作用是什么意思?你得到一个错误,段错误,意外的事情,如果有的话?