gpt4 book ai didi

c - 如何保持链表头不变?

转载 作者:行者123 更新时间:2023-11-30 15:37:47 26 4
gpt4 key购买 nike

我正在尝试创建一个链表结构来存储数据。链表的头部似乎正在以某种方式更新。我有以下代码。我似乎无法弄清楚如何将 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);
}

最佳答案

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

 mainPtr->name = strdup( strLower );

而不是为字符串分配内存。

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

关于c - 如何保持链表头不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22076075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com