C - 将字符串从一个结构复制到节点时出现问题

C - Problems copying string from one struct to a node

我正在尝试将字符串从一个结构中的字段复制到另一个结构(一个节点),以便最终创建一个哈希表。但是,我似乎在实际的字符串复制中遇到了一些问题。我创建了一个 for 循环来遍历源结构中的字符串,我知道迭代工作正常,因为如果我打印源字符串 (data[i].c_name),它们打印出来很好.不幸的是,当我尝试打印目的地 (class_id) 时,它似乎是空的(因此我的哈希函数当然没有做太多事情)。对此处潜在问题的任何见解将不胜感激。如果我没有提供足够的上下文,请告诉我。

#define LENGTH 30
#define MAX_OBS 80000

typedef struct
{
    char c_name[LENGTH];
    char s_name[LENGTH];
    double value[MAX_OBS];
}
sample;

typedef struct node
{
    char class_id[LENGTH];
    struct node *next;
}
node;

{
    char class_id[LENGTH];

    for (int i = 0; i < total_columns; i++)
    {
        // malloc a new node pointer for each new class label
        node *new_node = malloc(sizeof(node));

        // check that there was sufficient memory
        if (new_node == NULL)
        {
            return 6;
        }

        // copy c_name into node -- failing - class_id is empty
        strcpy(new_node->class_id, data[i].c_name);
        printf("%s\n", class_id);
    }
}

删除您打印的最后一个 char class_id[LENGTH];,因为它从未被初始化。然后切换您的 printf() 以使用 strcpy 的实际目标。

 strncpy(new_node->class_id, data[i].c_name, LENGTH);
 printf("%.*s\n", LENGTH, new_node->class_id);

我还在我的代码中设置了一些 LENGTH 限制,以确保您不会在没有终端 \0 的情况下对错误输入做坏事。永远不要盲目相信您的 C 输入,除非您以故障安全方式生成它。

免责声明:桌面检查更改。实际调试留给学生作为练习。