c - 为字符串分配新值 - C

标签 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);
}

最佳答案

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

这背后的原因是您仅为 2 个节点分配空间。您创建的每个节点都有 malloc 空间。

关于c - 为字符串分配新值 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9763782/

相关文章:

c - 为什么在可执行语句后声明变量不适用于 MS C 编译器?

c - 如何使用修复中的参数,修复是指针?

c - 产生箭头键的输出

c++ - 将用户输入传递给带有 char* 参数的函数

c - 用于交换字符串的输出相关查询

c - 我该如何开始解决这个问题并修复我的代码?

c++ - 将输入读入 C 风格的字符串

java - 如何从用户输入字符串中获取日期、月份和年份,例如 25/03/2012

c与eclipse,使: *** Error 1

python - 如何将多个输入行组合成一个字符串?