如何保持链表头不变?

时间:2014-02-27 17:36:43

标签: c char structure

我正在尝试创建一个链表结构来存储数据。链表的头部似乎在某种程度上更新。我有以下代码。我似乎无法弄清楚如何将char数组数据放入一个节点,并在所述char数组的数据更新时保持更新。

以下代码打印出传递给processStr函数的任何字符串。如何保持头脑更新?

//Linked List Structure 
mainNode *head = NULL;

//take and store word in data structure 
void processStr(char *str){

    //char array
   char strArray[sizeof(str)+1];

    //stores lower case string
    char strLower[strlen(str)];
    int i;
    for(i = 0; str[i]; i++)
            strLower[i] = tolower(str[i]);
    strLower[i] = '\0';

    //printf("%s : ", strLower);

    //Starts Linked List
    if(head == NULL){

            mainNode *mainPtr = (mainNode *)malloc(sizeof(mainNode));
            nameNode *namePtr = (nameNode *)malloc(sizeof(nameNode));

            mainPtr->name = strLower;
            mainPtr->numOccurances = 1;
            mainPtr->next = NULL;
            mainPtr->nextName = namePtr;

            namePtr->name = strArray;
            namePtr->next = NULL;

            head = mainPtr;

    }

    printf("%s : " , head->name);
}

2 个答案:

答案 0 :(得分:1)

您将指针mainPtr->namenamePtr->name分配给strLower中本地声明的变量strArrayprocessStr()。这意味着在该函数返回之后,对这些指针的任何访问都会导致未定义的行为。你可以做某事。喜欢

 mainPtr->name = strdup( strLower );

而是为字符串分配内存。

顺便说一句:strLower也必须声明为char strLower[strlen(str)+1];

答案 1 :(得分:0)

上面的代码只运行一次,只会将信息添加到头部一次。如果要在第二次运行时添加更多信息,请添加其他条件的代码。例如: -

if ( head == NULL ) {

   // code to insert data in case of first run
}else{

   // code to insert data for second run and so.....
}