• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語のプログラム中に使うsystem()関数に変数を使う場合)

C言語のプログラム中でsystem()関数に変数を使う方法

このQ&Aのポイント
  • C言語のプログラム中でsystem()関数に変数を使う方法について説明します。
  • system()関数を使ってテキストファイルの編集を行う際に、ファイル名を変数として扱いたい場合は、sprintf()関数を使用します。
  • sprintf()関数を使って、sortとuniqコマンドの引数をファイル名変数と組み合わせて生成し、system()関数に渡すことで、複数のファイルを編集するプログラムを作成することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

一度、systemは使わず、 sprintf(str,"sort < %d.txt |uniq >0%d.txt", z, z); ではなく printf("sort < %d.txt |uniq >0%d.txt\n", z, z); で出力が正しいことを確認した上で a.out | sh で実行するとか ↓のようにシェルスクリプトで作るとか #!/bin/sh n=0 while [ n -le 255 ] do sort < $n.txt |uniq > 0$n.txt n=`expr $n + 1` done

s3104s
質問者

お礼

ご回答ありがとうございます。 自分が思っていた以上に 難しいやり方をしていたんだと感じました。 教えて頂いたやり方を参考に 理解したいと思います。

その他の回答 (3)

回答No.4

たとえば 0.txt ファイルが 111 000 222 555 000 444 222 000 更に 1.txtファイルが 123 012 234 567 012 456 234 012 とするとき、次のプログラムを実行し、作成された 00.txt ならびに 01.txt を確認してみてください。 なお、エラーチェックはしていないので、付加してください。 /* source file: s310.c compile: gcc s310.c execution: ./a.out txt 2 ファイル名 txt およびファイル数 2 は、環境に応じて変更のこと。 */ #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int z, n; char str[255], *c; n = atoi(argv[--argc]); c = argv[--argc]; for(z = 0; z < n; z++) { sprintf(str, "sort -u <%d.%s >%02d.%s\n", z, c, z, c); // printf(str); system(str); } return 0; }

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

systemの実行ディレクトリが、想定するターゲットディレクトリと違う可能性が高いかと。 個人的にはシェルスクリプトで完結させる方が簡単な気がしますが……

s3104s
質問者

お礼

ありがとうございます。 シェルスクリプトを調べつつ ディレクトリ処理を考え直してみたいと思います。

  • notnot
  • ベストアンサー率47% (4900/10357)
回答No.1

プログラムにおかしいところはないので、期待しない動作と言うことはそれ以外の所に勘違いなどがあると思われます。

s3104s
質問者

お礼

そうですか。ありがとうございます! もう1度、プログラム全てを 見直してみます。

関連するQ&A

専門家に質問してみよう