为什么以写方式打开fopen返回null?

问题描述 投票:0回答:1

我正在尝试从文件中读取文本,然后将文本输出到另一个文件中,并交换了两个字母。我正在netBeans IDE和cygwin64编译器上使用C语言工作。我正在使用的文件夹是Documents / netBeansProjects / myprog的子文件夹。经过大量的试验和错误之后,我不得不找出问题所在,即fopen(nameout,"w")返回NULL。在此之前和之后,我将在代码中介绍最重要的事情:

#include <stdio.h>
#include <stdlib.h>

#define NAMEMAX 20
/*
 * 
 */

int main(int argc, char** argv) {
    char namein[NAMEMAX];
    char nameout[NAMEMAX];
    char sos[2];

    printf("insert name of file input, output and letters you want to swap\n");
    scanf("%s", namein);
    scanf("%s", nameout);
    scanf("%s", sos);

    FILE* fp = fopen(namein, "r");
    FILE* fil = fopen(nameout, "w");
    if (fp == NULL)  {
        printf("error while opening file on read\n");
        return(EXIT_FAILURE);
    }
    if (fil == NULL) {
        printf("error while opening file on write\n");
        return(EXIT_FAILURE);
    } 
}

输出显然是

 error while opening file on write

这里有一些我自己尝试过的事情:1)如果我使用fopen函数的第一个参数,则将双引号之间的字符串创建并完美写入。如果我像以前那样引用该字符串,则此方法不起作用。为了更容易理解:

fopen(nameout,"w")

暂时无效

fopen("newfile.txt", "w")

实际上是。

2)起初,我认为该错误是由于char数组“打印不同的值”而不是字符'\ 0'引起的,而这在我之前发生了。因此,在执行scanf之前,我尝试了一个循环以''填充字符串的所有字符。没改变。

[其他一些信息:fopen(namein,"r")的作用就像是一个吊饰。如果您在代码中发现一些不一致的地方(缺少一些括号或缩进错误),这是因为我必须对netbeans进行复制粘贴。将其推荐给我,我将确保更正该帖子。但是,错误仍然是fopen(nameout, "w")返回NULL

让我知道您是否需要有关代码或环境的更多信息,并在此先感谢您。

c netbeans null cygwin fopen
1个回答
0
投票

对于在scanf中输入的文件,您可能没有写许可权,或者将其放置在错误的目录中。因为您的代码看起来不错。可能这是Windows相关的权限问题,即您的程序运行的进程在目录中没有写权限。

© www.soinside.com 2019 - 2024. All rights reserved.