文字列を取得して代入するには?
[上に]
[前に]
[次に]
アドル
[E-Mail]
2000/02/19(土) 14:17:50
Cでcgiを書いているのですが、
呼び出した機能によって出力された文字列を、
変数に代入するにはどうしたらよいのでしょうか?
C言語もcgiも初心者なので、
どちらかで基本的な概念自体の勘違いをしてるかもしれませんが、
よろしくお願いします。
サーバーはUNIXで、
decoderというコマンドによって、
ある文字列が出力されるようになっています。
それを
char mozi[]={system("decoder")};
このように代入しようとしても代入されません。
S-pore
[HomePage]
2000/02/20(日) 18:55:16
うーん,Perlなら
$mozi = `decoder`;
でいけるんでしょうけどねぇ・・・。
C言語にもこのバッククウォートと同じようなことができる関数があるんでしょうか・・・。
少なくとも, system() ではたぶん無理でしょう。これの戻り値は int なので。
一応,強引に(っていうかこれしか方法がないのかも)一時ファイルを作る方法でやってみると・・・
{
FILE *fp;
char str[256];
system("decoder > tmp.txt");
if ((fp = fopen("tmp.txt", "r")) == NULL)
exit(1);
fgets(str, 256, fp);
fclose(fp);
:
:
}
これでたぶん str[] に decoder の実行結果が入ってくれると思いますが・・・。
Ichi
2000/02/21(月) 06:07:23
たしかにアドルさんはC言語の文字列について勘違いをなさっている様です。
C言語の文字列(に見えるもの)の実体は、メモリ上に確保されたchar型配列へのポインタです。
これは、初心者がつまづくところの一つです。(わかってしまえばなんてことはないのだが)
さらに言えば、system関数の戻り値は成功したら偽、失敗したら真です。
あとはS-poreさんの方法でいいと思います。
ラウォッチ
2000/02/21(月) 10:59:15
以下でやれば、一時ファイルは必要ありません。
{
FILE *fp;
char str[256];
if ((fp = popen("decoder", "r")) == NULL)
exit(1);
fgets(str, 256, fp);
pclose(fp);
:
:
}
アドル
2000/02/23(水) 11:46:12
[[解決]]
皆さんいろいろご指導ありがとうございます。
popenっていう関数があったんですね。
知りませんでした。
おかげさまで解決いたしました。
[上に]
[前に]
[次に]