Преобразование строки в код С++

Вопрос:Я изучаю С++ и разрабатываю проект для практики, но теперь я хочу превратить переменную (String) в код, например, у пользователя есть файл, содержащий код на С++, но я хочу, чтобы моя программа читала, что файл и вставьте его в код, например: #include #include #include #include using namespace std; int main( int

Вопрос:

Я изучаю С++ и разрабатываю проект для практики, но теперь я хочу превратить переменную (String) в код, например, у пользователя есть файл, содержащий код на С++, но я хочу, чтобы моя программа читала, что файл и вставьте его в код, например:

#include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std; int main( int argc, char* argv[] ) { ifstream file(argv[ 1 ]); if (!file.good()) { cout << «File » << argv[1] << » does not exist.n»; return 0; } string linha; while (!file.eof()) { getline(file, linha); if (linha.find(«code») != string::npos) { size_t idx = linha.find(«»»); //find the first quote on the line while ( idx != string::npos ) { size_t idx_end = linha.find(«»»,idx+1); //end of quote string quotes; quotes.assign(linha,idx,idx_end-idx+1); // do not print the start and end » strings cout << quotes.substr(1,quotes.length()-2) << endl; //check for another quote on the same line idx = linha.find(«»»,idx_end+1); } } } return 0; }

И вот файл exmaple:

code «time_t seconds;n seconds = time (NULL);n cout << seconds/3600;»

Но когда я запускаю программу, он не скрывает строку в коде, но печатает именно то, что находится в кавычках.

Спасибо!

Лучший ответ:

Ты правильно справляешься? Очевидно, что он отображается.

Возможно, то, что вы пытаетесь сделать, это некоторая инъекция кода в текущем процессе вроде http://www.codeproject.com/KB/DLL/code_injection.aspx

Ответ №1

С++ – это скомпилированный язык, а не интерпретируемый язык.

Таким образом, программа не может читать С++-код на лету и выполнять его, так как этот код требует компиляции.

Ответ №2

Что вы хотите – это фактически оценить строку во время выполнения. Это не поддерживается непосредственно на С++ или в других не интерпретируемых /jitted языках.

Ответ №3

Вы не можете делать то, что хотите на С++. Чтобы оценить аргументы командной строки, вам нужно встроить язык скриптинга в свою программу (Python может показаться хорошим примером – это не сложно). Аргумент string может быть оценен как код Python.

Ответ №4

Если целью является выполнение некоторых внешних script, я бы предположил, что script должен быть указан как один из наиболее часто используемых языков сценариев. Мы сделали это с perl много лет назад. Этот текст ссылки описывает как.

В то время как динамическая компиляция и связывание кода на С++ технически возможно, это довольно сложно, и результат может быть не слишком надежным – подумайте, как может быть, что автор “script” неправильно использует указатель и уничтожает что-то важное.

Языки сценариев, как правило, более сговорчивы, чем С++ для менее технических авторов

Ответ №5

Как уже отмечалось, С++ обычно является скомпилированным языком и просто не поддерживает встроенную поддержку для этого.

Два возможных решения вопроса по вашему запросу:

  • Найдите и используйте интерпретатор С++. Существует несколько вопросов StackOverflow по этому вопросу, и, по крайней мере, существуют два таких программного обеспечения. Я предпочитаю cint.
  • Вызвать компилятор С++ для кода для создания динамической библиотеки, которую вы впоследствии загружаете и вызываете. Это не будет точно так же, как ваш пример, но если пользователь должен предоставить “вызываемый” код (т.е. Одну или несколько функций).

Возможное решение вопроса, который вы, возможно, имели в виду:

  • Используйте язык расширения, такой как python, tcl или lua.
Оцените статью
Добавить комментарий