我对Windows编程和这个论坛相对较新。正如标题所说,每当我尝试运行我编写的特定C程序时,我都会收到此错误。该程序编译为在64位计算机上运行的x64。编辑:按下弹出窗口上的确定按钮后,我收到“访问被拒绝”消息。代码,我认为与此问题没有任何关系如下:
// CrtFil2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "string.h"
//#include BasInc2.c
//#include FilMst2.c
FILE * Opn(char PthNam[], char OpnMod[]);
void main()
{
FILE * FilMstFilPtr = NULL;
FilMstFilPtr = Opn("\\temp\\test.file", "wb");
printf("filptr=0x%p\n", FilMstFilPtr);
return;
}
//******************************************************************************
// Open a file.
//******************************************************************************
FILE * Opn(char PthNam[], char OpnMod[])
{
FILE * FilPtr = NULL;
errno = fopen_s(&FilPtr, PthNam, OpnMod);
if (errno != 0) {
printf("%s\n", PthNam);
perror("Could not open file");
return NULL;
}
printf("file opened for mode %s\n", OpnMod);
return FilPtr;
}
我在构建中获得了以下输出:
1>------ Build started: Project: CrtFil2, Configuration: Debug x64 ------
1> CrtFil2.cpp 1> CrtFil2.vcxproj -> C:\$SmpSysLib\$QsysS\CrtFil2\x64\Debug\CrtFil2.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
直到大约一小时前才开始工作。然后我评论了一些线条,它就退出了工作。我查看了搜索提供的前50个答案,其中大多数都涉及在XP或特定的第三方.exe上运行。如果这是一个重复的问题,请告诉我。我试过的一些建议是关闭Visual Studio并重新启动它,还关闭并重新启动PC。一个答案指向了这个链接:https://superuser.com/questions/358434/how-to-check-if-a-binary-is-32-or-64-bit-on-windows。根据答案,.exe被编译为x86应用程序。但是,在VS显示屏的顶部,它表示x64以及Property-> Configuration Manager。这是在Visual Studio-2015 Community Edition Update 1上。
即使源代码保持不变,我仍然可以使用原始程序。但是在不同的C程序上出现了同样的错误。我尝试重新安装VS但是当我尝试这样做时出错,所以我有点卡住了。
有没有办法解决这个问题?
答案 0 :(得分:0)
此头文件:#include“stdafx.h”实际上是来自该源文件(及其依赖项)的所有头文件的复合编译头。
如果您在编辑期间删除了#include语句,Visual Studio可能已删除该复合头文件。
所有#include语句必须位于源文件中。
有几种方法可以使visual studio删除已编译的头文件。一种方法是注释掉#include语句。
答案 1 :(得分:0)
最好编写可移植代码,即使只是在Windows上运行。
如此强烈建议您编写C函数:
#define _CRT_SECURE_NO_DEPRECATE
//#include "stdafx.h
#include <stdio.h>
#include <string.h>
#include <errno.h>
FILE * Opn(char PthNam[], char OpnMod[]);
int main( void )
{
FILE * FilMstFilPtr = NULL;
FilMstFilPtr = Opn("\\temp\\test.file", "wb");
printf("filptr=0x%p\n", (void*)FilMstFilPtr);
return 0;
}
//*****************************************************************
// Open a file.
//*****************************************************************
FILE * Opn(char PthNam[], char OpnMod[])
{
FILE * FilPtr = NULL;
#if 0
errno = fopen_s(&FilPtr, PthNam, OpnMod);
if (errno != 0) {
printf("%s\n", PthNam);
perror("Could not open file");
return NULL;
}
#else
if( NULL == (FilPtr = fopen( PthNam, OpnMod ) ) )
{
fprintf( stderr, "fopen failed for %s with mode: %s due to: %s\n",
PthNam, OpnMod, strerror( errno ) );
}
else
printf("file opened for mode %s\n", OpnMod);
#endif
return FilPtr;
}