C/C++流和文件

发布于 2024-12-02 05:01:12 字数 658 浏览 1 评论 0原文

我有以下代码:

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 可以吗?谢谢

I have the following code:

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);
}

Is this code save?I mean is it OK to call fopen after freopen was called and its stream was not closed? Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无法言说的痛 2024-12-09 05:01:12

你的代码看起来很安全。您可以在一个进程中多次打开同一个文件。文件描述符不会相互干扰。

我会避免像你一样重新打开标准输出。您可以使用单个 fopen 来完成整个程序,并避免您造成的混乱:查找 fprintf!

Your code looks safe. You are allowed to open the same file more than once in a process. The file descriptors will not interract.

I'd steer away from reopening stdout like you do. You could do this entire program with a single fopen and avoid the mess you're creating: look up fprintf!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文