我正在学习C ++并开发一个项目来练习,但现在我想在代码中转换变量(String),像这样,用户有一个包含C ++代码的文件,但我希望我的程序读取将文件插入代码中,如下所示:
#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;
}
这是一个文件例子:
code "time_t seconds;\n seconds = time (NULL);\n cout << seconds/3600;"
但是当我运行程序时,它不会将字符串转换为代码,但它会精确打印引号中的内容。
谢谢!
答案 0 :(得分:5)
C ++是一种编译语言,而不是解释语言。
因此,程序无法即时读取C ++代码并执行它,因为此代码需要编译。
答案 1 :(得分:3)
也许您要做的是在正在运行的流程中注入一些代码,例如http://www.codeproject.com/KB/DLL/code_injection.aspx
答案 2 :(得分:1)
您想要的是在运行时实际评估字符串。 C ++或其他非解释/搜索语言不直接支持此功能。
答案 3 :(得分:1)
你无法在C ++中做你想做的事。要评估命令行参数,您需要在程序中嵌入脚本语言(Python似乎是一个很好的例子 - 它并不难)。字符串参数可以作为Python代码进行评估。
答案 4 :(得分:0)
如果目标是执行一些外部提供的脚本,我建议将脚本指定为常用的脚本语言之一。我们多年前用perl做过这个。这个link text描述了如何。
虽然动态编译和链接C ++代码在技术上是可行的,但它非常棘手,结果可能不太强大 - 请考虑“脚本”作者滥用指针并破坏重要内容的方式。
对于技术水平较低的作者来说,脚本语言往往比C ++更容易处理
答案 5 :(得分:0)
正如其他人已经注意到c ++通常是一种编译语言,并且根本不提供本机支持。
您提出问题的两个可能的解决方案:
您可能想要的问题的可能解决方案: