2009-08-02 6 views
0

私はC++を学んでおり、練習するプロジェクトを開発していますが、今では変数(String)をコード内で変更したいと考えています。このように、ユーザーはC++コードを含むファイルを持っています私のプログラムは、そのファイルを読み込むことをしたいとコードに挿入し、このような: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; 
} 

そして、ここでは、ファイルexmapleです:

code "time_t seconds;\n seconds = time (NULL);\n cout << seconds/3600;" 

しかし、私は、それはひそかていないプログラムを実行すると文字列をコードに変換しますが、引用符に含まれるものを正確に出力します。

ありがとうございます!

答えて

3

あなたは正しいのですか?それは明らかに表示されます。

は、たぶん、何をしようとするあなたはC++でやりたいことができないこのhttp://www.codeproject.com/KB/DLL/code_injection.aspx

+0

しかし、どのように私は、コードの注入を行うために、coutを行うことなくこれを行うことができます。ありがとう!質問にある私のコードを –

+0

! –

5

C++はコンパイルされた言語であり、インタープリター言語ではありません。

したがって、このコードをコンパイルする必要があるため、プログラムはオンザフライでC++コードを読み取り実行することはできません。

+6

あなたはこの男と時間を無駄にしています。 –

+2

Neil、私はしばしば同じことを考えますが、一方であなたがそれらを説明しなければ何人かは物事を学ばないでしょう - そして、彼らと他の時代の多くをもっと無駄にするでしょう。 – schnaader

+0

彼の以前の投稿を見てください。私たちの何人かが試みましたが、私のために私は諦めました。 –

1

実行時に文字列を実際に評価する必要がありますか?これは、C++やその他の非解釈/ジッタ言語では直接サポートされていません。

1

のような実行中のプロセスのあるコードインジェクションです。コマンドライン引数を評価するには、プログラムにスクリプト言語を埋め込む必要があります(Pythonは良い例のように見えますが、難しくありません)。文字列引数はPythonコードとして評価できます。

0

外部的に提供されているスクリプトを実行することを目的としているのであれば、スクリプトはよく使われるスクリプト言語の1つとして指定することをお勧めします。私たちは何年も前にこれをperlでやっていました。このlink textはどのようにdscribes。

C++コードを動的にコンパイルしてリンクすることは技術的に可能ですが、非常に扱いにくく、その結果が堅牢ではないかもしれません - "スクリプト"作者がポインタを誤って使用して何かを重要なものにするかもしれません。

スクリプト言語は、他のは、C++は、一般的にコンパイル言語であり、単にこのためのネイティブサポートを提供していないことを指摘してきたように以下の技術的な作家のため

0

C++よりも扱いやすい傾向にあります。あなたはそれを尋ねるよう質問に対する

2つの解決策:

  • C++インタプリタを見つけて、使用しています。この問題にはいくつかのStackOverflowの質問があり、少なくとも2つのソフトウェアが存在します。私はcintを好む。
  • コードでC++コンパイラを呼び出して、ダイナミックライブラリを生成します。その後、ロードして呼び出します。これはあなたの例とまったく同じではありませんが、ユーザーが "呼び出し可能な"コード(つまり、1つ以上の関数)を提供しなければなりません。あなたが意図している可能性が質問に

考えられる解決策:

  • 拡張言語なパイソン、TCLまたはLUAを使用してください。