아래 코드는 두 개의 텍스트 파일을 연결하려고 시도하고 출력이 다른 텍스트 파일에 기록됩니다. 보시다시피 입력 파일에서 토큰을 얻으려면 yylex()
함수를 사용합니다. yywrap()
함수는 첫 번째 텍스트 파일에서 두 번째 텍스트 파일로 전달하고 EOF (End Of File)에 도달했을 때 신호를 보내줍니다. 내 동료가 제대로 작동하는 동안 내 노트북에 "Segmentation fault (core dumped)"
오류가 발생하는 이유는 무엇입니까? 나는 루트로서 터미널을 사용하고 있다고 언급한다. 이 내가 명령을 사용하는 방법입니다 :우분투의 세그먼트 오류 (코어 덤프) 12.04 yylex() 호출
::-:lex tokdef.l
::-:cc lex.yy.c -o dan -ll
::-:./dan 1text 2text outtext
Segmentation fault (core dumped)
을 그리고 이것은 내 코드입니다 : 나는 문제가 무엇인지 알아낼
%{
#include<string.h>
int second_file = 0;
char *nume2;
%}
%%
.;
\n;
%%
int main(int argc, char *argv[])
{
nume2=(char*)malloc(sizeof(char)*(strlen(argv[2])+1));
strcpy(nume2, argv[2]);
yyin = fopen(argv[1], "r");
yyout = fopen(argv[3], "w");
yylex();
fclose(yyin);
fclose(yyout);
}
int yywrap()
{
if(second_file == 0)
{
fclose(yyin);
yyin = fopen(nume2,"r");
second_file = 1;
return 0;
}
else
return 1;
}
왜 두 개의'fclose (yyin)'호출이 있습니까? 왜이 터미널을 루트 권한으로 사용하고 있습니까? –
@iharob 첫번째 fclose (yyin)은 첫 번째 파일을위한 것이고 두 번째 파일은 분명히 두 번째 파일을위한 것입니다. 터미널을 root로 사용하지 않으면'lex.yy.c' 파일이 생성됩니다. –
일반 사용자와 동일한 오류 메시지가 나타납니다. –