我正在使用双向链表构建文本编辑器。这些是我的结构:
#define N 4
typedef struct node
{
char data[N];
int size;
struct node* next;
struct node* prev;
}node;
typedef struct text
{
struct node* head;
struct node* tail;
int count;
int size;
}text;
这是我用来填充第一个节点的代码。
void push_text (text * t, char * s)
{
int i;
int len = strlen(s);
node *newnode, *nextnode, *head;
newnode = create_node();
t->count++;
head = newnode;
for (i=0; i<len; i++)
{
if (newnode->size < 4)
{
newnode->data[newnode->size] = s[i];
newnode->size++;
}
.
.
.
当我通过printf或通过调试器打印节点时,输出的长度为4个字符,与预期的一样。请注意,我在第一个节点填满后立即将其打印出来,因此问题就出在这段代码中。但是,当我使用时strlen(newnode->data)
,输出为5。这在以后给我带来很多问题。
怎么了
您没有在复制nul
终止符,ac字符串'\0'
的末尾需要一个a ,因此,如果它有4个字符,则使用5个字节,最后一个'\0'
未被复制到循环中。
但是,您应该使用strcpy()
而不是在循环中一一复制字节。
该strlen()
函数扫描字节,直到找到为止'\0'
,因此丢失'\0'
会导致Wrong Value!,这也是不strlen()
循环调用的原因,这是一个非常常见的错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句