【问题标题】:SImple C Program opening a file简单的 C 程序打开文件
【发布时间】:2023-03-03 21:24:01
【问题描述】:

我正在尝试编写一个程序来打开一个名为“write.txt”的文件。

#include <stdio.h>

main() {
    FILE *fp;
    fp = fopen("write.txt", "w");
    return 0;
 }

这应该有效吗?因为它什么也不返回。

【问题讨论】:

  • 它什么也不返回,因为你有一个return 0; 作为最后一个语句?还是您的意思是 fopen() 返回零?
  • 你期望它返回什么?返回、打印是什么意思?
  • 对不起,我的意思是 fopen 什么都不返回。
  • 它不能“什么都不返回”。在您的情况下,它究竟返回了什么?
  • 对不起。我说错话了。我的意思是没有创建或打开文件。

标签: c fopen


【解决方案1】:

除了main 的旧变体之外,该代码并没有太多错误。除非出错,否则它应该创建文件。

但是,由于您没有检查来自 fopen 的返回值,因此您可能会收到某种错误并且不知道。

我会开始:

#include <stdio.h>
#include <errno.h>
int main (void) {
    FILE *fp;
    fp = fopen ("write.txt","w");
    if (fp == NULL) {
        printf ("File not created okay, errno = %d\n", errno);
        return 1;
    }
    //fprintf (fp, "Hello, there.\n"); // if you want something in the file.
    fclose (fp);
    printf ("File created okay\n");
    return 0;
}

如果您坚持认为该文件没有被创建,但上面的代码表明它是,那么您可能是可怕的“IDE 正在与您认为的不同的目录中工作”综合症的受害者 :-)

某些 IDE(例如 Visual Studio)实际上会在它们位于 &lt;solution-name&gt;\bin&lt;solution-name&gt;\debug 之类的目录中时运行您的代码。您可以通过以下方式找到:

system ("cd"); // for Windows
system ("pwd") // for UNIXy systems

进入您的代码以查看其运行位置。 那是如果您指定相对路径行"write.txt" 将创建一个文件。否则,您可以指定绝对路径以确保它尝试在文件系统中的特定点创建它。

【讨论】:

  • 我相信在旧版本的 C 语言中,假定没有返回类型声明的函数会返回 int。对于 C++,这不是正确的;主函数是必需的返回一个int
  • 我想你会发现从 C99 开始你应该明确地返回一个 int。 C89/90 允许的默认值。
  • 关闭打开的文件是个好主意;可以在退出时将继承的文件(如标准输入和标准输出)保持打开状态。
  • 你最好使用perror("File not created ok");而不是printf(),因为它应该打印一个用户可读的错误而不是一个难以理解的错误号。
  • 是的,我非常同意,您这样做会更好。它也与问题本身无关 :-) 将其视为支持代码。
【解决方案2】:

您希望它“返回”什么 - 它会打开一个文件,在大多数平台上,如果它不存在则创建一个。

您可能应该在最后关闭(fp)文件。

【讨论】:

    【解决方案3】:

    我想你想打印文件 write.txt 的内容。 (假设它包含字符)。

    #include <stdio.h>
    
    int main()
    {             
    
        FILE *fp,char ch;
    
        fp=fopen("write.txt","r");
    
        if(fp==NULL)
        {
            printf("Some problem in opening the file");
            exit(0);
        } 
        else
        { 
            while((ch=fgetc(fp))!=EOF)
            {
                printf("%c",ch);
            }
        }
    
        fclose(fp);
    
        return 0;  
    }
    

    【讨论】:

    • 打开文件是为了写,不是读。此外,您的 printf 不包括 errno,因此您不会知道 为什么 打开失败。使用 strerror 或 perror。
    【解决方案4】:

    我认为在开始尝试处理文件之前,您应该学习更多的 C 基础知识。返回意味着一些数据从被调用函数传递回调用代码。在这种情况下,您在程序结束时返回 0。除了创建一个新文件之外,您没有对 FILE 指针执行任何操作...

    【讨论】:

    • 我知道。我把我的问题搞砸了。但我的意思是没有打开/创建文件。我正在尝试关注 K&R p160-161。
    • K&R 是一个可怕的学习 C 的工具,你最好用一些更现代的东西。
    猜你喜欢
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 2014-10-28
    • 2010-09-07
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多