Я относительно новичок в программировании Windows и этом форуме. Как говорится в заголовке, я получаю эту ошибку, когда я пытаюсь запустить определенную программу на C, которую я написал. Программа скомпилирована как x64, работающая на 64-битной машине. Изменить: после того, как я нажму кнопку ОК во всплывающем окне, я получаю сообщение «Отказано в доступе». Код, который я не думаю, что не имеет ничего общего с этой проблемой следующим образом:получение ошибки во время выполнения: «program.exe недействительное приложение win32»
// 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 и перезапустить его, а также закрыть и перезагрузить ПК. Один ответ указал на эту ссылку: 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 1.
Я получил исходную программу, хотя исходный код остался прежним. Но та же самая ошибка возникла в другой программе на C. Я попытался переустановить VS, но получил ошибку, когда попытался это сделать, поэтому я несколько застрял.
Есть ли способ устранить эту проблему?
Unrelated к вашей проблеме, но спецификация C говорит, что 'main' должен быть объявлен в одном из двух способов, либо как функция, принимающая' void' и возвращает 'int', или принимает аргумент' int' и 'char * []' и возвращает 'int'. Если ваша функция 'main' не делает этого, то это технически неверная программа. –
Спасибо за подсказку. Я внес изменения, и, как вы сказали, это не имело никакого значения. –
@JoachimPileborg Это зависит от того, какой стандарт C используется. Что правильно в текущем стандарте, никто не знает, потому что в нем есть неопределенное выражение «... или каким-то другим способом, определенным реализацией». [См. Это] (http://stackoverflow.com/a/31263079/584518) ниже «C99 размещенная среда», со ссылками на обоснование C и другие части стандарта. Сам комитет, похоже, довольно смущен. – Lundin