‘壹’ linux下fopen总是失败返回空指针为什么
Linux下使用fopen函数时,第一个参数尽量用绝对路径,这样不容易调用失败;而且这个路径必须存在,否则也会调用失败,可以先判断这个路径是否存在,再调用fopen函数。
‘贰’ linux fopen函数 打开文件总是失败
是这样的再输入文件路径的时候要注意:
你的方向错了应该是"\"这样的反斜杠而且要输入两个反斜杠
因为字符串中的1个反斜杠的意思就是说他是个转意字符只有\\的时候才会显示出来1个字符向你的那个路径就应该写成fp=fopen("\\mnt\\yaffs\\red.txt")
有兴趣共同探讨C就给我留言啊
‘叁’ fopen 打开文件失败的问题
fopen 打开文件失败,有两个可能的原因:
1,相对路径错了;
2,文件名命名的有问题,比如打开fopen("1.txt","r");在相对路径下创建文本文件的的时候,将该文件命名为1 就可以了,不要加后缀.txt 。
‘肆’ linux中,使用fopen函数打开文件失败
你可以看下,在另一个目录的文件你是否有访问权限,同一个目录下一般来说,你把他复制过来,这个文件的拥有者(owner)就是你了,你是肯定可以访问的。每个程序都有一个当前目录的环境变量,你在shell中执行程序时,shell程序就是你执行的程序的父进程,你的程序从shell程序中继承了当前目录,所以你只给定文件名时,当然打开的就是当前目录下的文件了
‘伍’ Linux系统下C语言fopen函数几个小问题
fopen函数是在当前目录下打开一个文件,其调用的一般形式为:
文件指针名=fopen(文件名,使用文件方式);
“文件指针名”必须是被声明为FILE 类型的指针变量;
“文件名”是被打开文件的文件名;
“使用文件方式”是指文件的类型和操作要求;
“文件名”是字符串常量或字符数组。
例如:
FILE *fp;
fp=fopen("file a","r");
其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件。
‘陆’ fopen 失败得原因
第一,如果是"rb",就是读文件,要先确认Tonny.txt在当前编译的目录下是否存在
第二,要确认Tonny.txt是否有权限打开
第三,要确认Tonny.txt是否有程序正在占用,例如有个程序正在fopen这个文件但没有fclose这个文件,那么这个是会打开失败的
‘柒’ fopen函数打开文件失败
fopen函数用来打开一个文件,其调用的一般形式为:
文件指针名=fopen(文件名,使用文件方式);
“文件指针名”必须是被说明为FILE 类型的指针变量;
“文件名”是被打开文件的文件名;
“使用文件方式”是指文件的类型和操作要求。
“文件名”是字符串常量或字符数组。
例如:
FILE *fp;
fp=fopen("file a","r");
其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件。
又如:
FILE *fphzk
fphzk=fopen("c:\\hzk16","rb");
其意义是打开C驱动器磁盘的根目录下的文件hzk16,这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜线“\\ ”中的第一个表示转义字符,第二个表示根目录。
使用文件的方式共有12种,下面给出了它们的符号和意义。
文件使用方式
‘捌’ 若执行fopen函数时发生错误,则函数的返回值是
若执行fopen函数时发生错误,则函数的返回值是NULL(即0)。
文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。
执行fopen函数时,如果文件打开成功,则返回该文件结构体的指针,如果 打开失败(例如,读打开时文件不存在,写打开时文件不能创建),则返回NULL(即0)。
这个函数是用来判断指针是否已经到达文件尾部的。若fp已经指向文件末尾,则feof(fp)函数值为“真”,即返回非零值;否则返回0。
使用void类型指针要注意的几条规则:
1、void*类型只有地址信息没有类型信息,所以不能计算偏移。
C/C++中的指针通常来说有两个属性:
(1)指向变量。
(2)指向对象的地址和长度。
指针其实就是存储被指向变量的地址,并不保存其长度;而且存的这个地址仅是变量的首地址,并不是该变量占据内存的所有地址空间。
2、任何指针(包括函数指针)都可以赋值给void指针。
特点:
(1)不需要类型转换。
(2)只获得变量/对象地址而不获得大小。
‘玖’ fopen出错是什么原因 同样的函数 在换台机子就不能用了
mode有下列几种形态字符串: r 打开只读文件,该文件必须存在。 r+ 打开可读写的文件,该文件必须存在。 w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。 a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。 返回值 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。 附加说明 一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。 范例 #include<stdio.h main(){FILE * fp;fp=fopen(“noexist”,”a+”); if(fp= =NULL) return; fclose(fp);}原来使用gets(filename) 获取文件名字 然后fopen(filename,rb) 现在打算用生成的exe文件直接打开文件,在cmd里面直接输入:openfile.exe myfile.bat就可以打开文件, 具体做法是:你的main函数要重新写.原型为 int main(int argc, char* argv[]) argc:参数的个数,(包括程序名文件名) argv:参数表,每一个元素都是一个字符类型的指针 argv[0]就是你的程序文件名指针,argv[1]—argv[n]才是你输入的参数用法举例:/************************************************************** 文件名为:mainpara.c,保存在F:\vccode目录下面 编译后在F:\vccode\debug 目录下面生成一个可执行文件mainpara.exe然后进入MS-DOS,敲入: F: 回车, 敲入:cd vccode\debug 回车
‘拾’ linux fopen返回NULL,errno为0,用perror输出的是Success,求解释。
你直接1:touch /home/1 创建一个文件;
2:vi 1;
3.输入几个字母abcde
4:wq//保存
fp = fopen( /home/1, "r");
if(fp==NULL) //如果失败了
{
printf("错误!");
exit(1); //中止程序
}
看看打开能行么,可能是宏定义的问题。
errno 记录系统的最后一次错误代码。代码是一个int型的值,在errno.h中定义的,你看到不一定是fopen失败记录的值。
手工,望采纳!