【问题标题】:Linked List not working with strtok链表不适用于 strtok
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 2021-11-19
    • 2017-06-22
    • 1970-01-01
    相关资源
    最近更新 更多