2011-03-29 3 views
0

Я использую функцию getline() в C, и он продолжает давать мне seg-ошибки, когда я использую его больше, чем один раз, как и для массива. Вот как я написал:Мне нужно знать, правильно ли использую getline

temp = (char *)malloc(sizeof(char)*clen); 
read = getline(&temp, &clen, stdin); 
tn = strtok(temp, ","); 
strcpy(travel[tripnum].name, tn); 
tn = strtok(NULL, ","); 
travel[tripnum].country = tn; 
free((void *) temp); 

Пожалуйста, дайте мне знать, если я заявляю, что-то неправильно

+0

C не имеет функции 'getline'. Чью функцию 'getline' вы пытаетесь использовать? –

+0

Это не так? [Как насчет этого?] (Http://www.crasseux.com/books/ctutorial/getline.html) – fnokke

+0

@fnokke: Это 'getline' является расширением GNU, и это нормально, но вопрос отмечен только« C » вот почему я задал вопрос. На странице man: «Оба getline() и getdelim() являются расширениями GNU, которые доступны с libc 4.6.27». –

ответ

0

Пробовал ли вы это делать temp = (char *) malloc (sizeof (char) * clen + 1);

Из-за оканчивающихся нулем строку

0

Попробуйте использовать это наряду с тем, что другие говорили. Я чувствую, что функция getline должна использоваться без амперсанда. Как прочитано = getline (& temp, clen, stdin);

0

Ваш tn переменная (результат strtok()) указывает внутри temp буфер.

Буфер temp разрушен в последней строке фрагмента кода, однако один из tn указателей (на внутренней стороне temp) был сохранен в travel[tripnum].country.

Этот travel[tripnum].country является оборванным указателем, и все обращения через него являются недействительными.

Смежные вопросы