1

C で別の言語のインタープリターを使用しています。別の言語からこのインタープリターにコード (約 200 行) を渡す必要があり、ここで問題が発生します。

char* command_line[] = {
    "", 
    "-e", 
    "print \"Hello from C!\\n\";"
};

このコードは次の方法で解析されます。

(..)
    parser(my_p, NULL, 3, command_line, (char **)NULL);
(...)

上記のコードでは配列を使用していますが、単純なコードでも " ; | \ などの文字の前に \ でラップする必要があります。

この問題を回避し、200 行以上の複数行のコードを快適に渡すにはどうすればよいですか?

4

4 に答える 4

5

C++11 を使用している場合は、生の文字列リテラルを使用できます。

R"(print "Hello from C!\n";)"

または、すべてのデータを外部ファイルに入れて、開始時に読み取るだけです。そこでデータをエスケープする必要はありません。

于 2013-08-21T09:48:13.537 に答える
-1

スクリプトを使用して、テキスト入力をファイルとして取得し、文字列化できます(二重引用符と改行をエスケープします)。

#!/usr/bin/env python
import sys

def main(argv = None):

    if argv is None:
        argv = sys.argv

    if len(argv) < 2:
        sys.stderr.write("Usage: stringify.py input.txt [... input.txt]\n")
        sys.exit(1)

    i = 1
    while i < len(argv):
        inname = argv[i]
        firstline = True
        try:
            infile = open(inname, "r")
            for line in infile:
                line = line.replace('"', '\\"').replace('\n', '\\n')
                sys.stdout.write('"{0}"\n'.format(line))
        except IOError, msg:
            sys.stderr.write("exception {0}\n".format(msg))
            return 2
        i = i + 1
    return 0

if __name__ == "__main__":
    sys.exit(main())
于 2013-08-21T09:47:40.150 に答える