【发布时间】:2015-10-21 20:01:34
【问题描述】:
这段代码应该是由用户输入的十个名字组成的链接列表 它应该打印出该列表。
#include<stdio.h>
#include<stdlib.h>
struct NameList
{
char *name;
struct NameList *nname;
};
typedef struct NameList NL;
int main()
{
int i;
NL *first;
NL *next;
first = (NL*)malloc(sizeof(NL));
if (first ==NULL)
printf("Memory not properly allocated\n");
NL *pNames;
pNames = first;
for(i = 0; i<10; i++)
{
printf("Enter a name: ");
scanf("%s", &pNames->name);
if(i == 9)
next = NULL;
else
next = (NL*)malloc(sizeof(NL));
pNames->nname = next;
pNames = pNames->nname;
}
到这里都没有问题,我输入了十个名字但是一输入 我得到一个分段错误的姓氏。 我猜它来自这里,但我完全不确定
pNames = first;
while(pNames != NULL)
{
printf("%s\n", pNames->name);
pNames = pNames->nname;
}
}
【问题讨论】:
-
使用调试器逐行执行。这有助于理解这类问题。
-
如果
first == NULL,您应该退出。 -
我的 C 有点生锈了,但是你确定不需要在 scanf 之前为 name 分配空间吗?
-
在写入每个结构之前,您应该为 (char *name) 分配内存。
-
@FiddlingBits 但是我将 pNames = 设置为 first,当 pNames (first) 不等于 NULL 时运行 while 循环,这意味着它在 pNames 等于 NULL 时退出
标签: c linked-list