2011-03-29 2 views
0

C에서 getline() 함수를 사용하고 있는데 배열과 같이 한 번 더 사용할 때 seg faults를 제공합니다. 여기에 내가 쓴 방법은 다음과 같습니다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); 

당신은 (CLEN + 1)을 할당해야 this getline tutorial에서 보는 바와 같이 나는 잘못

+0

C에는'getline' 함수가 없습니다. 누구의'getline' 함수를 사용하려고합니까? –

+0

그렇지 않습니까? [이건 어때?] (http://www.crasseux.com/books/ctutorial/getline.html) – fnokke

+0

@fnokke :'getline'은 GNU 확장입니다. 괜찮지 만 질문은 "C"로만 표시됩니다. 그래서 내가 그 질문을했다. 맨 페이지에서 : "getline()과 getdelim() 모두 GNU 확장이며, libc 4.6.27부터 사용 가능합니다." –

답변

2

뭔가를 선언하고 있으면 알려 주시기 바랍니다. 터 L 널 NULL에 대해 한 x 추가.

0

이 작업을 수행 했습니까? temp = (char *) malloc (sizeof (char) * clen + 1);

null 종료 문자열 때문에

0

다른 사람들이 말한 것과 함께 사용해보십시오. getline 함수에서 clen이 앰퍼샌드없이 사용되어야한다고 생각합니다. Like = getline (& 임시 직원, clen, stdin);

0

tn 변수 (결과 : strtok())는 temp 버퍼 내에 있음을 나타냅니다.

temp 버퍼 그러나, 당신의 조각의 마지막 줄에 (temp의 내부까지) tn 포인터 중 하나를 파괴 travel[tripnum].country에 저장되었습니다.

travel[tripnum].country은 매달려있는 포인터이며이를 통해 모든 액세스가 유효하지 않습니다.

관련 문제