gpt4 book ai didi

c - 链接列表不适用于 strtok

转载 作者:行者123 更新时间:2023-11-30 17:42:06 24 4
gpt4 key购买 nike

这就是我打算做的:获取网页的内容,使用 strtok 将其分成几部分并将每个部分存储在链接列表的节点中,然后获取每个节点并使用 strtok 将它们分开进一步,并从中获取我想要的数据。我遇到的问题是,由于某种原因,当我第二次开始使用 strtok 时,我的链表会减少到一个节点。

链表节点结构:

struct node {
char* tidbit;
char* address[35];
char* key[51];
struct node *next;
};

构建链表的代码:

root = malloc(sizeof(struct node));
conductor = root;
root -> next = malloc(sizeof(struct node));

conductor->tidbit = strtok(buf,"+"); // sets the tidbit variable equal to the result of strtok


// builds the linked list of items
while (conductor->tidbit!= NULL){
conductor -> next = malloc(sizeof(struct node));
conductor = conductor-> next;
conductor->tidbit = strtok(NULL, "+");
}
conductor->next = NULL;

此代码有效,并返回整个列表:

conductor = root;
while (conductor->next != NULL){
i++;
printf("Next %d: %s\n", i, conductor->tidbit);
conductor = conductor ->next;
}

此代码仅返回输入到列表中的第一项(额外的下一项是因为链接列表中的第一项是垃圾数据,我不需要它)。

    conductor = root;
conductor = conductor->next;

while (conductor->next != NULL){
conductor = conductor->next;
strtok(conductor->tidbit, ">");
strtok(NULL, ">");
conductor->tidbit = strtok(NULL, ">");
strncpy(conductor->key, conductor->tidbit, 51);
conductor->key[51] = '\0';
conductor->tidbit = strtok(NULL, ">");
strncpy(conductor->address, conductor->tidbit + 42, 34);
if (conductor->address[33] == '"')
conductor->address[33] = '\0';
else
conductor->address[34] = '\0';
printf("Values: key: %s address: %s\n", conductor->key, conductor->address);
while (strtok(NULL, ">") != NULL){
}
}

本质上,最后一段代码试图获取第一次使用 strtok 返回的字符串,并将其分解为由“">”分隔的片段。它从字符串中提取两个相关的数据(地址和 key ),并将它们存储在节点中。然后它应该转到下一个节点并再次执行,直到用完节点。

我有预感是 strtok 导致了问题。这些部分的长度是可变的,但始终与某个字符 (">") 保持一定的距离,这就是我需要 strtok 的原因。如有任何建议,我们将不胜感激。

最佳答案

我将从一个简单的问题开始:char* address[35] 声明一个包含 35 个 char* 的数组; 不是 35 个字符 的数组。一旦你解决了这个问题,剩下的事情就应该是显而易见的了。 char *key[51]; 也是如此 - WhozCraig

关于c - 链接列表不适用于 strtok,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20830785/

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