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 输入,除非您以故障安全方式生成它。
免责声明:桌面检查更改。实际调试留给学生作为练习。
我正在尝试将字符串从一个结构中的字段复制到另一个结构(一个节点),以便最终创建一个哈希表。但是,我似乎在实际的字符串复制中遇到了一些问题。我创建了一个 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 输入,除非您以故障安全方式生成它。
免责声明:桌面检查更改。实际调试留给学生作为练习。