【问题标题】:printing the output it is showing error in line, rest output is correct打印输出显示错误,其余输出正确
【发布时间】:2021-01-11 21:33:44
【问题描述】:

在第一行它打印的是 64 而不是 pf 0100,它试图改变值,我注意到如果我把 0 放在第一位,那么输出是每个数字的总和到 8 的幂。 如果 0 没有开始,那么它正在打印相同的数字。 帮帮我,这是什么问题。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{  

    typedef struct node
    {
        int num;
        struct node *next;
    }
    node;
    node* list = NULL;

    node *n1 = malloc(sizeof(node));
    if (n1 != NULL)
    {
        n1 -> num = 111111; 
        n1 -> next = NULL;  
    }

    list = n1;
    node *n2 = malloc(sizeof(node));
    if (n2 != NULL)
    {
        n2 -> num = 22222;
        n2 -> next = NULL;
        n1 -> next = n2;
    }

    // addind n3 in middle of n1 n2

    node *n3 = malloc(sizeof(node));
    if (n3 != NULL)
    {
        n3 -> num = 33333;
        n3 -> next = n2;
        n2 -> next = NULL;
        n1 -> next = n3;
    }

    // ADDIND TO THE END OF LIST

    node *n4 = malloc(sizeof(node));
    if (n4 != NULL)
    {
        n4 -> num = 444;
        n4 -> next = NULL;
        node *tmp1 = NULL;
        tmp1 = list;

        while (tmp1 -> next != NULL)
        {
            tmp1 = tmp1 -> next;
        }
        tmp1 -> next = n4;
    }

    // ADDING TO THE STARTING OF LIST   

    node *n5 = malloc(sizeof(node));
    if (n5 != NULL)
    {
        n5 -> num = 0100;
        n5 -> next = list;
        list = n5;
    }

    node *tmp = list;
    while(tmp != NULL)
    {
        printf("%d\n", tmp -> num);
        tmp = tmp -> next;
    }

}

输出是

64

111111

33333

22222

444

【问题讨论】:

  • 当你使用调试器时,程序做错的第一件事是什么?
  • 看来您应该使用const char* num; 而不是int num; 和n5 -&gt; num = "0100"; 而不是n5 -&gt; num = 0100;。还将其他assignmens更改为nx -&gt; num以分配字符串,将printf("%d\n", tmp -&gt; num);更改为printf("%s\n", tmp -&gt; num);。

标签: c linked-list segmentation-fault cs50


【解决方案1】:

在 C 中,整数文字以 0 开头,不以 0x 或 0X 开头,被视为八进制数。

您无法从整数中获取原始字符串,因此如果您想保留这样的字符串,则应将数据存储为字符串。

这样做:

  • 将num 的类型从int 更改为const char*。
  • 将要分配的数据从整数更改为字符串。
  • 更改printf() 的格式说明符以打印字符串。

固定代码:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{  

    typedef struct node
    {
        const char* num;
        struct node *next;
    }
    node;
    node* list = NULL;

    node *n1 = malloc(sizeof(node));
    if (n1 != NULL)
    {
        n1 -> num = "111111"; 
        n1 -> next = NULL;  
    }

    list = n1;
    node *n2 = malloc(sizeof(node));
    if (n2 != NULL)
    {
        n2 -> num = "22222";
        n2 -> next = NULL;
        n1 -> next = n2;
    }

    // addind n3 in middle of n1 n2

    node *n3 = malloc(sizeof(node));
    if (n3 != NULL)
    {
        n3 -> num = "33333";
        n3 -> next = n2;
        n2 -> next = NULL;
        n1 -> next = n3;
    }

    // ADDIND TO THE END OF LIST

    node *n4 = malloc(sizeof(node));
    if (n4 != NULL)
    {
        n4 -> num = "444";
        n4 -> next = NULL;
        node *tmp1 = NULL;
        tmp1 = list;

        while (tmp1 -> next != NULL)
        {
            tmp1 = tmp1 -> next;
        }
        tmp1 -> next = n4;
    }

    // ADDING TO THE STARTING OF LIST   

    node *n5 = malloc(sizeof(node));
    if (n5 != NULL)
    {
        n5 -> num = "0100";
        n5 -> next = list;
        list = n5;
    }

    node *tmp = list;
    while(tmp != NULL)
    {
        printf("%s\n", tmp -> num);
        tmp = tmp -> next;
    }

}

输出:

0100
111111
33333
22222
444

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多