c-当将字符串插入链表时,会出现换行,而当修复时会导致异常行为



我对C中的链表还很陌生,我很确定我走在了正确的轨道上,但我一直被困在这个问题上,因为我不知道是什么导致了这个输出。这会导致问题,因为在搜索节点时,由于字符串格式的奇怪行为,我无法匹配字符串。

我试过做node->title[strcspn(node->title, "n")] = 0;,但当我在insert方法中使用它时,它并没有完成我想要它做的事情。例如,我们有Title: [HARDWAREn]并调用(strcspn(,它会导致

[Title: [HARDWARE代替Title: [HARDWARE]

附言:我只是用括号来解释字符串中多余的无关字符,这样我就可以用strcmp((来比较它们。

有人知道怎么解决这个问题吗?

Enter title:
HARDWARE
TITLE to search for: [HARDWARE]
Current: []
]urrent: [ELECTRONICS
]urrent: [OUTSIDE GARDEN
]urrent: [INDOOR GARDEN
]urrent: [MILLWORK
]urrent: [LUMBER
]urrent: [APPLIANCES
]urrent: [HARDWARE
...

这是打印curr->标题后使用以上任何一行。我唯一做的另一件事是在我的主菜单中,在打印列表下面列出一个菜单,用于其他功能,但这是与填充链表中的节点相关的逻辑。

您的代码无效。

例如,函数insertSortedList(作为函数search(产生若干内存泄漏,并且还具有未定义的行为。

这些内存分配

node = (node *) malloc(sizeof(node));
curr = (node *) malloc(sizeof(node));

没有道理。分配的内存未被使用,将丢失。

节点head通常可以等于NULL。因此,例如访问数据成员next以获取空指针会调用未定义的行为。

除此之外,指向头节点的指针在函数内不会更改,因为它是通过引用传递给函数的。

我将展示如何编写函数。尝试自己更新其他功能。

int insertSortedList( node **head, 
const char *title, 
const char *category, 
double time) 
{
node *node = malloc( sizeof( node ) );
int success = node != NULL;
if ( success )
{
strcpy( node->title, title );
node->title[ strcspn( node->title, "n" ) ] = '';
strcpy( node->category, category );
node->category[ strcspn( node->category, "n" ) ] = '';
node->time = time;
while ( *head != NULL && !( strcmp( node->title, ( *head )->title ) < 0 ) ) 
{
head = &( *head )->next;
}
node->next = *head;
*head = node;
}
return success;
}

该函数至少可以像一样调用

insertSortedList(&head, title, category, time);
^^^^^

如果您使用的系统将从具有两个符号'r''n'的文件中读取的字符串附加在一起,则可以使用以下strcspn调用

node->title[ strcspn( node->title, "rn" ) ] = '';

最新更新