【发布时间】:2018-12-30 12:29:15
【问题描述】:
这是一个学校项目,我需要完成一个函数来复制看起来像这样的员工链接列表
typedef struct TEmployee
{
struct TEmployee * m_Next;
struct TEmployee * m_Bak;
char * m_Name;
} TEMPLOYEE;
这是我的复制功能
TEMPLOYEE * cloneList(TEMPLOYEE * src)
{
TEMPLOYEE* current = src;
TEMPLOYEE* newList = NULL;
TEMPLOYEE* tail = NULL;
while(current != NULL)
{
if(newList==NULL)
{
newList = (TEMPLOYEE*)malloc(sizeof(TEMPLOYEE));
newList -> m_Name = current -> m_Name;
newList -> m_Next = NULL;
newList -> m_Bak = NULL;
tail = newList;
}
else
{
tail -> m_Next = (TEMPLOYEE*)malloc(sizeof(TEMPLOYEE));
tail = tail -> m_Next;
tail -> m_Name = current -> m_Name;
tail -> m_Next = NULL;
tail -> m_Bak = current -> m_Bak;
}
current = current -> m_Next;
}
return newList;
}
这工作正常,但它不能正确复制 m_Bak,所以当我尝试这个断言时,m_Next 和 m_Bak 应该是相同的,但不是
assert ( b && ! strcmp ( b -> m_Name, "Maria" ) && b -> m_Bak == b -> m_Next );
感谢任何帮助。
【问题讨论】:
-
xxxx -> m_Name = current -> m_Name;行不会克隆 C 中的字符串,您可以使用 memcpy() 整个结构进行克隆。我个人更喜欢使用 calloc 来自动 0-ing 一个新结构。 -
使用strdup复制字符串
-
至于样式:大写名称通常用于预处理器名称或
structs 的名称(例如typedef struct TEMPLOYEE {...}tEmployee;)。以m_开头的名称通常在 C++ 中用于表示变量是类的属性。
标签: c pointers linked-list char assert