【发布时间】:2016-12-13 09:15:00
【问题描述】:
我编写了这个小程序,它以二进制形式读取文件(本例中为 Databases.db)并将其内容复制到 cpydatabases.db...
当我在fopen_s(&source, "Databases.db", "r"); 中运行调试器时,source 始终为NULL(调试时显示内存条目始终为Null, 0x000000000000 <NULL>)。
此程序在 Visual Studio 2015 中运行。
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include "dirent.h"
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>
#define BUFFSIZE 2048
char ch, *readbuf;
int nread, nwrit;
FILE *source, *target;
int main()
{
int returnv;
fopen_s(&source, "Databases.db", "r");
if ( source !== NULL)
{
fclose(source);
return (EXIT_FAILURE);
}
fopen_s(&target,"cpydatabases.db", "w");
//check again
if (target == NULL)
{
fclose(target);
return(EXIT_FAILURE);
}
//setting the char that reads the binary
readbuf = (char *)malloc(BUFFSIZE* sizeof(char));
if (readbuf == NULL)
{
fclose(source);
fclose(target);
return(EXIT_FAILURE);
}
while (1)
{
nread = fread((void *)readbuf, sizeof(char), BUFFSIZE, source) ;
// fwrite((void *)readbuf, sizeof(char), nread, target);
nwrit = fwrite((void *)readbuf, sizeof(char), nread, target);
if (nwrit < nread)
{
returnv = (EXIT_FAILURE);
}
if (nread <= BUFFSIZE)
{
returnv = (EXIT_SUCCESS);
break;
}
}
fclose(source);
fclose(target);
return 0;
}
【问题讨论】:
-
fopen_s函数调用的返回值是多少?如果source是NULL,你一定不能close()它。 -
查看msdn示例中fopen_s的返回值msdn.microsoft.com/en-us/library/z5hh6ee9.aspx
-
文件是否与可执行文件位于同一文件夹中?
-
注意:你
mallocated 的内存不是freed。 -
为什么不能使用
fopen,而当它失败时,使用perror?喜欢here?
标签: c