2011-08-27 4 views
0

나는 다음과 같은 코드를 가지고 :C/C++ 스트림 파일

int checkCorrectness(int i,char *iStr) 
{ 
    if(atoi(iStr) == i) 
    return 1; 
    return 0; 
} 
void foo(int i) 
{ 
    printf("inside foo %d\n",i); 
} 
void print() 
{ 
    char mystring[100]; 
    freopen("myfile.txt","w+",stdout); 
    for(int i =0;i < 100;++i) 
    { 
     foo(i); 
     FILE *f = fopen("myfile.txt","r"); 
     if (f == NULL) perror ("Error opening file"); 
     else { 
     while (fgets (mystring , 100 , f) != NULL); 
     if(!checkCorrectness(i,mystring); 
      break; 
     fclose (f); 

     } 
    } 
    fclose(stdout); 
} 

나는 freopen을가 호출하고 스트림이 닫혀 있지 된 후에는 fopen 호출 OK 의미이 코드가 저장인가? 고마워요

+1

왜 C++에서 C 파일 함수를 사용하고 있습니까? 또한 실제로 문자열 객체를 사용해야하며 메모리에 직접 작용하지 않습니다. – Prime

답변

0

코드는 안전 해 보입니다. 프로세스에서 동일한 파일을 두 번 이상 열 수 있습니다. 파일 기술자는 간섭하지 않습니다.

나는 당신이하는 것처럼 stdout을 다시 여는 것을 멀리 할 것입니다. 당신은 하나의 fopen으로이 전체 프로그램을 수행 할 수 있으며 작성중인 엉망을 피할 수 있습니다 : fprintf를 찾으십시오!

+0

알아요.하지만 printf 만 사용해야합니다! myfile.txt는 printf가 myfile에 계속 쓰기를 허용하고 스트림에서 엉망이 생기지 않게 할 것입니다. – Yakov

+0

당신이 해낸 방식은 지저분합니다. prinf 만 사용하는 이유는 무엇입니까? 숙제 문제? 그리고 "f"는 "stdout"과 완전히 독립적입니다. 그렇습니다. 그렇게 할 수 있습니다. 당신은 그렇게하지 않아도되지만 할 수는 있습니다. –