C 文件指针在初始化后仍然为空?

C 文件指针在初始化后仍然为空?,c,fopen,C,Fopen,嗨,伙计们,当我试图打开一个文件时,我遇到了一个问题。在函数中,当我尝试读取现有文本文件时,初始化文件指针后,仍然会出现错误“无法打开文件”,代码如下: FILE * fp; fp = NULL; fp=fopen("results.txt","r"); if(fp==NULL){ printf("error!"); exit(1); } 使用调试器,我可以看到fp根据请求初始化为NULL。在下一个顺序中,我可以看到其值更改为“0x751d9c68”。 所以现在它不是空的,但

嗨,伙计们,当我试图打开一个文件时,我遇到了一个问题。在函数中,当我尝试读取现有文本文件时,初始化文件指针后,仍然会出现错误“无法打开文件”,代码如下:

FILE * fp;
fp = NULL;
fp=fopen("results.txt","r");
if(fp==NULL){

    printf("error!");
    exit(1);
}
使用调试器,我可以看到fp根据请求初始化为NULL。在下一个顺序中,我可以看到其值更改为“0x751d9c68”。 所以现在它不是空的,但是程序仍然打印错误

PS:我使用相同的代码在另一个程序中打开另一个文件(有效):由于fp的初始值始终为NULL,因此它被更改为“0x751d9c68”(是的,它在两个程序中具有相同的值),但这次有效,因为fp实际上不同于NULL

PPS:如果有帮助的话,我正在使用Codelite

编辑:添加printf(“%p\n”,fp);打印此“751D9C68”


最后,是的,文本文件与我的可执行文件位于同一目录中,是的,我有权打开该文件,该文件包含一定数量的行,每个行有2个字符串和3个int。

您的代码应该可以工作,我只能想到3件可能导致此问题的事情。 根据我的经验,往往是最简单的错误让你着迷,因为你太专注于更复杂的元素,以至于有些事情让你忘记了。我看不到你节目的其余部分,所以如果这些答案中有任何一个看起来是傲慢的,请原谅我。以下是我要检查的第一件事:

1.)文件权限。确保您是具有访问和/或更改相关文件权限的用户。这在linux上是一个相当简单的修复程序,但我不了解windows

2.)文件位置。确保文本文件与可执行文件位于同一目录中。如果不指定文件位置,则需要执行此操作


3.#包括声明。有时候,即使是我们中最优秀的人也会因为太激动而无法进入我们的大部分程序,而忘记了包含stdio.h和/或stdlib.h。如果是这种情况,您可能会遇到一个问题,即您将文件指针设置为null,然后fopen函数不运行,因此您的指针仍然为null。

您的代码应该可以工作,我只能想到3件可能导致此问题的事情。 根据我的经验,往往是最简单的错误让你着迷,因为你太专注于更复杂的元素,以至于有些事情让你忘记了。我看不到你节目的其余部分,所以如果这些答案中有任何一个看起来是傲慢的,请原谅我。以下是我要检查的第一件事:

1.)文件权限。确保您是具有访问和/或更改相关文件权限的用户。这在linux上是一个相当简单的修复程序,但我不了解windows

2.)文件位置。确保文本文件与可执行文件位于同一目录中。如果不指定文件位置,则需要执行此操作


3.#包括声明。有时候,即使是我们中最优秀的人也会因为太激动而无法进入我们的大部分程序,而忘记了包含stdio.h和/或stdlib.h。如果是这种情况,您可能会遇到一个问题,即您将文件指针设置为null,然后fopen函数不运行,因此指针仍为null。

如果您的代码打印出
错误
和not
无法打开文件
,我假设您没有向我们展示与故障相关的所有内容。请发布一个。您确定该文件存在且可读吗?该文件是否存在于您当前的工作目录中?你有访问权吗?我不相信你。在某处添加
printf(“%p\n”,fp)
。如果代码打印
错误,请调用
strerror
获取错误原因
和not
无法打开文件
,我假设您没有向我们展示与故障相关的所有内容。请发布一个。您确定该文件存在且可读吗?该文件是否存在于您当前的工作目录中?你有访问权吗?我不相信你。在某处添加
printf(“%p\n”,fp)
。调用
strerror
获取错误原因代码没有错误,也没有警告。。理论上应该是可行的,但事实并非如此。在Xcode上运行fopen()时遇到了同样的问题,这个答案为我指明了正确的方向。使用此答案解决了问题:代码没有错误,也没有警告。。理论上应该是可行的,但事实并非如此。在Xcode上运行fopen()时遇到了同样的问题,这个答案为我指明了正确的方向。使用以下答案解决了问题:
    Atleta * leggiRisultati (char fileName [], int * dim){FILE * fp; int count, i;

    Atleta temp;
     fp = NULL;
    fp=fopen(fileName,"r");
    printf("%p\n", fp);
    if(fp==NULL){

   perror("Error");

}


while (fscanf (fp, "%s%s%d%d%d", temp.cod, temp.nome, &temp.tN, &temp.tB, &temp.tC)== 5)
count ++;
rewind (fp);

 Atleta * atl = (Atleta*) malloc(count * sizeof(Atleta));


 for (i=0; i<count; i++){
  int nr = fscanf(fp, "%s%s%d%d%d",atl[i].cod, atl[i].nome, &atl[i].tN, &atl[i].tB, &atl[i].tC);
  //just controlling if the reading is done properly
    if (nr < 4) {
        printf ("cannot read the file %s",fileName);
        exit (1);
    }

   } fclose(fp);
    return atl;
 }
  int main (){ int dim; Atleta * a; int i;

a = leggiRisultati("risultati.txt", &dim);

for (i =0; i<dim;i++){
stampaRisultato(a[i]);}

return 0;
 typedef struct {
char cod[5];
char nome[21];
int tN, tB, tC;
  }Atleta;