强烈返回错误的值

用户名

我正在使用双向链表构建文本编辑器。这些是我的结构:

#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。这在以后给我带来很多问题。

怎么了

伊哈罗布·阿西米(Iharob Al Asimi)

您没有在复制nul终止符,ac字符串'\0'的末尾需要一个a ,因此,如果它有4个字符,则使用5个字节,最后一个'\0'未被复制到循环中。

但是,您应该使用strcpy()而不是在循环中一一复制字节。

strlen()函数扫描字节,直到找到为止'\0',因此丢失'\0'会导致Wrong Value!,这也是不strlen()循环调用的原因,这是一个非常常见的错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章