我正在尝试创建一个链表结构来存储数据。链表的头部似乎在某种程度上更新。我有以下代码。我似乎无法弄清楚如何将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);
}
答案 0 :(得分:1)
您将指针mainPtr->name
和namePtr->name
分配给strLower
中本地声明的变量strArray
和processStr()
。这意味着在该函数返回之后,对这些指针的任何访问都会导致未定义的行为。你可以做某事。喜欢
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.....
}