#include <stdio.h> // для printf/scanf
#include <string.h> // для strstr
#include <stdlib.h> // для system
#include <locale.h> // для setlocale
int isTryingToExecuteOurselves( char str[], char fileNameVerbose[] )
{
const char DELIM = '\\'; // подразумеваем, что разделителем в системе является такой слэш: \
char* buf;
char* delimLastOccurence;
int res = 0;
// если имя файла имеет вид "D:\MyCoolProg\zzz.exe"
if( 0 == strcmp( str, fileNameVerbose ) ) return 1;
// есть ли слэш
delimLastOccurence = strrchr( fileNameVerbose, DELIM );
if( 0 != delimLastOccurence )
{
buf = (char*)malloc( (strlen(fileNameVerbose) + 1) * sizeof(char) );
// отрезаем "D:\MyCoolProg", приводя к виду "zzz.exe"
strcpy( buf, delimLastOccurence + 1 );
// и проверяем, не "zzz.exe" ли ввёл пользователь
if( 0 == strcmp( str, buf ) ) res = 1;
free( buf );
}
return res;
}
int main( int argc, char *argv[] )
{
const char STOP_STRING[] = "exit";
const int BUF_SIZE = 64; // размер буфера под строку
char str[BUF_SIZE]; // строка
setlocale( LC_ALL, "Russian" ); // чтобы нормально выводилась кириллица. может и без этой строчки работать
start:
printf( "Введите имя файла(%s для выхода): ", STOP_STRING );
scanf( "%s", str );
if( 0 == strcmp( str, STOP_STRING ) )
{
//return 0;
goto end;
}
// проверяем, является ли введённая строка допустимым именем файла
if( 0 == strstr( str, ".exe" ) || // если не содержит .txt
0 != strstr( str, "(" ) || // или содержит (
0 != strstr( str, ")" ) ) // или )
{ // то считаем, что такое имя файла недопустимо
printf( "Введённая строка не является допустимым именем файла\n" );
//return 0;
goto end;
}
// проверяем, не пытаемся ли запустить себя
if( isTryingToExecuteOurselves( str, argv[0] ) )
{
printf( "Предотвращён запуск себя\n" );
//return 0;
goto end;
}
// вызываем системную функцию, записанную в str
// это эквивалентно набору в консоли содержимого str и нажатию Enter
// в нашем случае str имеет вид "zzz.exe"
printf( "Запускаем %s\n", str );
system( str );
end:
printf( "Для повторной работы введите 1(что угодно другое для выхода): " );
scanf( "%s", str );
if( 0 == strcmp( str, "1" ) )
goto start;
return 0;
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.