char로 파일 char를 읽습니다. 콜론에 도달하면 개행 문자에 도달 할 때까지 모든 문자를 건너 뛰고 싶습니다. 사실, 콜론을보고 나면 다음 라인으로 건너 뛰고 싶습니다 (다른 라인이있는 경우). 충분히 단순 해 보이지만 걱정하지 않는 데이터를 건너 뛰는 두 번째 while 루프에서 벗어날 때 sigsegv를 수신합니다.C fgetc sigsegv - 행 끝으로 건너 뛰기
중단없이 코드는 예상대로 작동합니다 (원하는 출력은 아님). 즉, 첫 번째 콜론까지 데이터를 읽은 다음 EOF로 건너 뛰고 종료합니다.
5 FILE *fp = fopen("myFile", "r");
6 char *string = (char*) malloc(sizeof(char));
7 char *head = string;
8 if(fp){
9 int c;
10 while((c=fgetc(fp)) != EOF){
11 if(c == ':'){
12 *string++ = '\n';
13 while((c=fgetc(fp)) != EOF){
14 if(c == '\n') // Skip to end of line
15 break; //removing break avoids sigsegv
16 }
17 }else{
18 *string++ = c;
19 }
20 }
21 }
내가 루프의 탈옥 할 때, 하나 c
또는 fp
가 SIGSEGV 원인이 어떻게 든 수정 될 것으로 보인다. 내 생각 엔 fp
이 어떻게 든 수정되어 부모 fgetc()
이 fp
을 호출하면이 오류가 발생합니다. 그 외에도, 나는 그 문제를 일으키는 것이 확실하지 않습니다.
http://stackoverflow.com/help/mcve –
GDB (또는 유사한 디버거)를 사용하여 크게 문제의 근본 원인을 발견하는 데 도움 것입니다. – user3629249