为字符串分配新值 - C.

时间:2012-03-19 01:00:44

标签: c string char variable-assignment

尝试在命令行中从用户处获取多个文件名并将它们存储到链接列表中,但我收到了分段错误。想法是让用户输入每个文件名,然后在完成时输入“q”。

我输入第一个文件名“man_on_moon.txt”,不会发生错误。进入第二个后,“sat_moons_rings.txt”我得到了......分段错误:11 我相信它发生在我对char * name的任务中,但我不确定。

char *name = malloc(sizeof(char) *50);
scanf("%s", name);
list *curr, *head;
curr = malloc(sizeof(list));
head = malloc(sizeof(head));
if(name != "q")
{
    curr->item = name;
    head->next = curr;
    curr = curr->next;
    scanf("%s", name);
}
while(name != "q")
{
    curr->item = name;
    curr = curr->next;
    scanf("%s", name);
}

2 个答案:

答案 0 :(得分:3)

您永远不会将curr->next设置为任何内容,因此它指向NULL,然后您将curr设置为curr->next。因此,当您进入while循环访问curr->item时,您正试图获取NULL的字段,并且您会遇到段错误。

这背后的原因是你只为2个节点的mallocing空间。你为每个节点都有malloc空间。

答案 1 :(得分:1)

您应该限制scanf字符串,使其不会溢出缓冲区:

scanf("%49s", Name);

然后,为了比较循环的结束,你需要检查字符 - 而不是字符串比较:

if (name[0] != 'q') 

...

最后,您还需要将您的名字复制到您的列表中。