아래 코드를 실행할 때 분할 오류가 발생합니다.getline()/strsep() 조합으로 인해 세그먼트 화 오류가 발생합니다.
기본적으로 3M 라인 이상인 .csv
파일을 읽고 다른 것들은 나중에 (문제와 관련 없음) 읽어야하지만 207746 회 반복 후 세그먼트 화 오류가 반환됩니다. p = strsep(&line,"|");
을 제거하고 line
전체를 인쇄하면> 3M 라인이 인쇄됩니다.
int ReadCSV (int argc, char *argv[]){
char *line = NULL, *p;
unsigned long count = 0;
FILE *data;
if (argc < 2) return 1;
if((data = fopen(argv[1], "r")) == NULL){
printf("the CSV file cannot be open");
exit(0);
}
while (getline(&line, &len, data)>0) {
p = strsep(&line,"|");
printf("Line number: %lu \t p: %s\n", count, p);
count++;
}
free(line);
fclose(data);
return 0;
}
메모리 할당과 관련이 있지만 문제를 해결하는 방법을 알 수는 없습니다.
라인 # 207746에 구분 기호가 하나 이상 있습니까? strsep()는 그렇지 않은 경우 다르게 동작합니다. –
'strsep'는 첫 번째 인수를 수정하므로, 처음으로 할당 된 버퍼'getline'의 시작을 잃어 버리는 것입니다. 그렇게하지 않으면,'strsep '를 사용해야한다면 별도의 임시 파일을 사용하십시오. 'p'가 NULL이 아닌지 확인하십시오. 'len'은 어디에 선언 되었습니까? 'getline'을 호출하기 전에 0입니까? – Useless