【问题标题】:How to open a file with fopen in C?如何在 C 中使用 fopen 打开文件?
【发布时间】:2021-07-15 20:23:23
【问题描述】:

我创建了一个程序来打开一个文件,读取内容并打印它。但是,“fopen”返回“NULL”。 在“fopen”中,我尝试使用 r 和 a+,但没有。 写入 nella 'fopen' 的文件存在,所以我不知道为什么它返回 NULL。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#include <time.h>
#include <errno.h>
#include <iso646.h>
#include <stddef.h>


int main() {

FILE *fp=fopen("prova.txt", "a+");
int vett[50];
int i;

if (fp!=NULL) {
    printf("Il file è stato aperto con successo!");
    
}else{

    printf("Il file non è stato aperto con successo");
    return 0;

}

for (i = 0; !feof(fp); i++) {

    fscanf(fp, "%d", &vett[i]);
    printf("\n%d\n",vett[i]);
    
}

return 0;

}

你能帮帮我吗?

【问题讨论】:

  • 你可以打印errno看看是什么原因。可能你没有权限?您忘记关闭文件了。
  • 我的精神力量表明prova.txt 不在当前工作目录中。从命令行而不是 IDE 运行您的程序。并确保您的当前目录中同时包含可执行文件和文本文件。
  • @selbie,打开模式 a+ 如果文件不存在,应该创建它。
  • 你应该在程序中关闭文件使用 fclose(fp) 问题是我认为也许你没有关闭文件确保你关闭它,也许文件损坏或者你没有访问文件

标签: c file fopen


【解决方案1】:

如果fopen 返回 NULL,则无法打开文件(大部分时间是因为它不存在)。确保文件与可执行文件位于同一目录中。

您想从文件中读取,因此您应该使用"r" 模式打开它。

你的循环是错误的,你可能想要这个:

for (i = 0; i < sizeof(vett)/sizeof(vett[0]); i++) {

    if (fscanf(fp, "%d", &vett[i]) == EOF)
      break;

    printf("\n%d\n",vett[i]);        
}

注意:sizeof(vett)/sizeof(vett[0])vett 数组的元素数(本例中为 50)。

【讨论】:

    【解决方案2】:

    使用prova.txt 文件的绝对路径。除非您知道当前工作目录是什么,并且知道您需要将其打印出来,否则相对路径是没有意义的。例如,使用getcwd 获取当前工作目录。它可能不是你想象的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 2019-05-10
      相关资源
      最近更新 更多