Присваивание нового значения строке - C - PullRequest
0 голосов
/ 19 марта 2012

Попытка получить несколько имен файлов от пользователя в командной строке и сохранить их в связанном списке, но я получаю ошибку сегментации. Идея состоит в том, чтобы пользователь вводил каждое имя файла и затем вводил '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 ]

3 голосов
/ 19 марта 2012

Вы никогда не устанавливаете curr->next на что-либо, поэтому оно указывает на NULL, тогда вы устанавливаете curr на curr->next.Поэтому, когда вы попадаете в цикл while, вы получаете доступ к curr->item, вы пытаетесь получить поля NULL, и вы получаете ошибку сегмента.

Причина этого в том, что вы используете неправильное пространство только для 2 узлов.У вас есть место для malloc для каждого создаваемого вами узла.

1 голос
/ 19 марта 2012

Вам следует ограничить строку scanf, чтобы она не могла переполнить ваш буфер:

scanf("%49s", Name);

Затем, чтобы сравнить конец вашего цикла, вам нужно проверить символ, а не сравнение строк:

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

..

Наконец, вам также необходимо скопировать свое имя в список.

...