指针和链表节点创建错误
error with pointers and linked list node creation
我正在尝试从文件中读取行输入,正确解析该行,并将该行的三个信息字段添加到链表中的节点。
这是我从文件中读取的函数:
int readFile(char* file)
{
FILE *fp = fopen(file,"r");
char ch;
char line[50];
char string1[100];
char string2[100];
char string3[100];
char endLine[2];
int i = 0;
while(fscanf(fp, "%[^\t]\t%[^\t]\t%[^\n]", string1, string2, string3) == 3)
{
printf( "%s\t%s\t%s\n", string1, string2, string3);
addNode(string1, string2, string3, head, tail);
}
printNodes();
fclose(fp);
return 0;
}
这是我的 addNode 函数:
// create stuff
Entry *entry = malloc(sizeof(Entry));
entry->name = string1;
entry->address = string2;
entry->number = string3;
Node* node = malloc(sizeof(Node));
node->entry = entry;
node->next = NULL;
// Empty list
if(head->next == NULL)
{
head->next = node;
}
// Else, add to the end of the list
else
{
Node* temp = head->next;
while(temp->next!= NULL)
{
temp = temp->next;
}
temp->next = node;
}
我在调用 printNodes 时遇到问题,只有最后读取的节点信息被打印 X 次,其中 X 是我应该拥有的唯一节点的数量。我想我遇到了一个问题,每次我创建一个新节点时我都会覆盖一个旧节点,但我不完全确定,因为这是我第一次使用原始 C 代码。
再次感谢!
编辑:
这是 printNodes() 函数:
int printNodes(Node* head)
{
Node *temp = head->next;
while(temp->next != NULL)
{
printf("\n%s\t%s\t%s\n", temp->entry->name, temp->entry->address, temp->entry->number);
temp = temp->next;
}
return 0;
}
您的问题在这里:
entry->name = string1;
entry->address = string2;
entry->number = string3;
您正在为每个节点提供相同的内存位置。这些字符串包含您在调用 printNodes()
.
时读入的 last 值
我正在尝试从文件中读取行输入,正确解析该行,并将该行的三个信息字段添加到链表中的节点。
这是我从文件中读取的函数:
int readFile(char* file)
{
FILE *fp = fopen(file,"r");
char ch;
char line[50];
char string1[100];
char string2[100];
char string3[100];
char endLine[2];
int i = 0;
while(fscanf(fp, "%[^\t]\t%[^\t]\t%[^\n]", string1, string2, string3) == 3)
{
printf( "%s\t%s\t%s\n", string1, string2, string3);
addNode(string1, string2, string3, head, tail);
}
printNodes();
fclose(fp);
return 0;
}
这是我的 addNode 函数:
// create stuff
Entry *entry = malloc(sizeof(Entry));
entry->name = string1;
entry->address = string2;
entry->number = string3;
Node* node = malloc(sizeof(Node));
node->entry = entry;
node->next = NULL;
// Empty list
if(head->next == NULL)
{
head->next = node;
}
// Else, add to the end of the list
else
{
Node* temp = head->next;
while(temp->next!= NULL)
{
temp = temp->next;
}
temp->next = node;
}
我在调用 printNodes 时遇到问题,只有最后读取的节点信息被打印 X 次,其中 X 是我应该拥有的唯一节点的数量。我想我遇到了一个问题,每次我创建一个新节点时我都会覆盖一个旧节点,但我不完全确定,因为这是我第一次使用原始 C 代码。
再次感谢!
编辑: 这是 printNodes() 函数:
int printNodes(Node* head)
{
Node *temp = head->next;
while(temp->next != NULL)
{
printf("\n%s\t%s\t%s\n", temp->entry->name, temp->entry->address, temp->entry->number);
temp = temp->next;
}
return 0;
}
您的问题在这里:
entry->name = string1;
entry->address = string2;
entry->number = string3;
您正在为每个节点提供相同的内存位置。这些字符串包含您在调用 printNodes()
.