간단한 파일 입출력 질문입니다

조회수 543회

패턴을 스트링에서 찾아

패턴과 스트링이 맞는 부분의 개수 맞는부분의 스트링 인덱스

를 출력하는코드를 작성하고 현재 바탕화면에 reault.txt, string.txt, pattern.txt 세 개를 저장해둔 상태입니다. 두번째파일에는 예시로 "Hello world my name is world", 세 번째 파일에는 예시로 world가 있어서 현재 파일 입력은 매우 잘되는 상태입니다. 실제로도 코드 내의 변수 stack에는 2가 들어가고 패턴이 맞는 부분의 인덱스인 6, 23도 printf로하면 잘 출력되던데, 이상하게 result.txt에는 왜 아무것도 출력이 안되는지 모르겠습니다ㅜ

#include <stdio.h>
#include <string.h>
#define CMAX 10000000
#define PMAX 3000
int stack=0;
char space=' ';
char str[CMAX], pat[PMAX];
int stack_2[PMAX];
int nfind(char*, char*);
int main(){
    FILE *fp=fopen("string.txt", "rt");
    FILE *fp2=fopen("pattern.txt", "rt");
    fgets(str, CMAX, fp);
    fgets(pat, PMAX, fp2);
    for(int i=0;i<PMAX;i++)
        stack_2[i]=-1;
    nfind(str, pat);
    int S;
    S=stack;
    FILE *fp3;
    fp3=fopen("result.txt", "wt");
    if(fp3==NULL)
    {
        printf("failed\n");
        return 1;
    }
    fprintf(fp3, "%d\n", stack);
    while(stack>0)
    {
        fprintf(fp3, "%d ", stack_2[stack-1]);
        fprintf(fp3, "%c", space);
        stack--;
    }
    fclose(fp);
    fclose(fp2);
    fclose(fp3);
    return 0;
}
int m=0;
int nfind(char *string, char *pat)
{
    int i, j, start=0;
    int n;
    int lasts=strlen(string)-1;
    int lastp=strlen(pat)-1;
    int endmatch=lastp;
    for(i=0;endmatch<=lasts;endmatch++, start++){
        if(string[endmatch]==pat[lastp])
        {
            for(j=0, i=start;j<=lastp&&string[i]==pat[j];i++)
            {
                j++;

            }


        }
        if(j==lastp+1)
       {

             stack_2[m]=start;
             m++;
             stack++;
             j=0;
        }
        else
            continue;

    }
    return 0;

}

1 답변

  • result.txt를 만들어놓고 실행했는데 아무것도 안 써진다면 아주 높은 확률로… 문제는 코드가 아니라 권한 및 파일 처리 부분에 있습니다.

    기본적으로 파일을 작성하는 프로그램은:

    1. 출력 대상 파일이 없으면 그걸 만들 수 있어야 하며, 그 파일의 위치(디렉토리) 역시 없으면 만들 수 있어야 합니다.
    2. "기존의 출력을 덮어쓰는 출력"을 방지해야 합니다. appending하거나, 항상 새 파일을 만들거나.
    3. 출력 대상 파일 경로에 대한 쓰기 권한이 있어야 합니다.

    즉, 이 코드는 result.txt를 만들어놓지 않은 상태에서도 돌아야 하는 겁니다. result.txt를 삭제하신 다음 다시 실행해 보세요. 만약 permission 어쩌구 하는 에러가 뜬다면, 지금 돌리고 계신 자바 애플리케이션이 문제의 경로에 쓰기 권한이 있는지 확인해 주세요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)