これに答えても謝罪しますが、私の問題を解決する答えが見つかりませんでした。 私はCで、システムの文字列を渡すためにしようとしている:コマンドのbashのバージョンがCの文字列に引用符を含むシステムコマンドを渡す方法
grep -w "dog\|animal" myfile
である私は、次のCコードを持っている:私はそれをコンパイルして実行すると
char str[50] ="dog\\|animal";
char file[50]="myfile";
char buf[20];
snprintf(buf, sizeof(buf), "grep -w \"%s\" %s",str,file);
system(buf);
を私は与えられていますこのエラー:
sh: 1: Syntax error: Unterminated quoted string
最小例:
#include <stdio.h>
#include <string.h>
int main(){
char str[50] ="dog\\|animal";
char file[50]="myfile";
char buf[20];
snprintf(buf, sizeof(buf), "grep -w \"%s\" %s",str,file);
system(buf);
}
2つのコンポーネント文字列サイズ50があり、それらを20バイトのターゲットにスクイーズしようとします。いずれにしても、20は余りにも短いです。オーバーヘッドには12文字、ファイル名に6文字、一致パターンに11文字が含まれています。それは幸せにつながるわけではありません。 (あなたが 'snprintf()'からの戻り値をチェックしたなら、それはあなたが与えたよりも多くのスペースが必要であると言います)。そして、最も基本的なデバッグ手法は 'printf(" [%s] \ n "、buf)'を追加して実行中のものを表示します。 –
ええ、固定されました。私はちょうど最初に違反行を取り除きました。最小の例は、コンパイルして実行するコードのリテラル部分です。 –
@JonathanLefflerああ私はばかだ、私はそれが200だと思った –