【发布时间】:2013-12-29 22:25:34
【问题描述】:
这就是我打算做的事情:获取网页的内容,使用 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;
}
这段代码只返回输入到列表中的第一项(额外的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 返回的字符串,并将其分解为由“>”分隔的部分。它从字符串中提取两个相关的数据(地址和密钥),将它们与节点一起存储。然后它应该转到下一个节点并再次执行,直到它用完节点。
我有一种预感,是 strtok 导致了问题。这些部分的长度可变,但始终与某个字符(“>”)保持一定距离,这就是我需要 strtok 的原因。任何建议表示赞赏。
【问题讨论】:
-
这并不能直接解决您的问题,但如果您尝试标记 html 内容,您是否考虑过 tidy.sourceforge.net
-
我看不出这对我有什么帮助。如果它能让我删除所有 HTML 标签,那会有所帮助,但我看不到这样做的选项。 HTML 中的所有内容都格式正确,问题实际上是每个项目的 id 值不同,所以我不能只倒数字符串并获取值
-
我会从
char* address[35]声明一个包含 35 个数组的简单问题开始char*; 不是 35 个char的数组。一旦你解决了这个问题,其余的应该是显而易见的。char *key[51];也是如此 -
这就是为什么我希望我有更多的 C 经验,指针....它总是指针。谢谢
标签: c linked-list tokenize