Мне нужно знать, правильно ли я использую getline - PullRequest
0 голосов
/ 29 марта 2011

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

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);

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

Ответы [ 4 ]

2 голосов
/ 29 марта 2011

Как видно из этого руководства по getline , вам нужно выделить (clen + 1). Один дополнительный для терминала NULL.

0 голосов
/ 29 марта 2011

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

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

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

0 голосов
/ 29 марта 2011

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

0 голосов
/ 29 марта 2011

Вы пытались сделать это temp = (char *) malloc (sizeof (char) * clen + 1);

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

...