作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这就是我打算做的:获取网页的内容,使用 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/
我是一名优秀的程序员,十分优秀!