我在编写一个带有字符数组并将其拆分为链接列表的函数时遇到问题。该函数接受参数char text []并构建一个链表,其中列表中的每个链接都是text[]
的一行。例如,如果text[] = "hello\nworld\n"
,则链接列表将为"hello\n"-->"world\n"
到目前为止,这是我的代码:
TB newTB(char text[]){
TB newBuffer = NULL;
newBuffer = malloc(sizeof(struct textbuffer));
assert(newBuffer != NULL);
newBuffer->length = 0;
newBuffer->head = NULL;
newBuffer->tail = NULL;
char *p = strtok(text, "\n");
while (p != NULL){
link newNode = newLink(p);
//insert the new node into the linked list
insertNode(newBuffer, newNode);
p = strtok(NULL, " ");
}
return newBuffer;
}
TB是我创建的文本缓冲区类型,包含指向列表的第一个和最后一个节点的链接以及列表长度。我测试了newLink()和insertNode()函数,这似乎是strtok部分的一个问题。
当我输入text[] = "hello\nmy\nname\nis\nben\n";
然后打印列表时,它会打印:
hellomy
name
is
ben (on separate lines instead of spaces)
并且还说列表只有长度= 2.(长度在insertNode()内增加。)
我知道这很长,但有人可以帮忙吗?
答案 0 :(得分:0)
变化:
p = strtok(NULL, " ");
为:
p = strtok(NULL, "\n");
因此,您一直在寻找新行分隔符,而不是空格。