4

ばかげているように聞こえるかもしれませんが、このシステム コールに int/char を渡す方法がわかりませんでした。

これが私がそれをどのように機能させたいかです

system ("cal %d %d", month, year);

cal 3 2009これにより、端末「 」で次のコマンドが表示されると思います

端末に 2009 年 3 月のカレンダーが表示されます。

しかし、コンパイラは引数が多すぎると不平を言っています

何か案は?system ("cal ")このメソッドが動的カレンダーを返す ようにする必要があります。

注:cal引数を取るcal month year

4

7 に答える 7

8

適切なコマンド ライン文字列を作成する必要がありsystem()ます。

char cmd[64];

snprintf(cmd, sizeof cmd, "cal %d %d", month, year);
system(cmd);

バッファ オーバーフローに関する通常の警告が適用されますが、両方の引数が整数であるこの特定のケースでは、かなり安全なはずです。

于 2009-03-31T08:28:41.130 に答える
3

基本的に、システムコールから printf を実行するだけです:

char my_cmd[MAX_SIZE];
snprintf(my_cmd, MAX_SIZE, "cal %d %d", month, year);
system(my_cmd);
于 2009-03-31T08:29:32.050 に答える
1

必要な変換がすべて行われた文字列を渡す必要があります。このような文字列を生成するために sprintf() を使用できますが、十分な大きさのバッファを割り当てることに注意してください。

于 2009-03-31T08:25:28.160 に答える
1

これは、システムが printf のように動作すると想定しているために発生しますが、そうではありません。必要なものを取得するには、まず sprintf を介して置換をバッファーに取得し、次にこのバッファーをシステムに渡す必要があります。

ただし、コマンド ラインの実行時に未知のパラメーターが渡される可能性があるため、これは潜在的なセキュリティ ホールになる可能性があることに注意してください。また、使用する一時バッファが最終的な文字列をホストするのに十分な大きさであることにも注意する必要があります。

于 2009-03-31T08:26:44.957 に答える
1

試す

#include <stdlib.h>
#include <stdio.h>

int main()
{
  char command_buf [20];
  const int month = 3;
  const int year = 2009;
  snprintf(command_buf, sizeof(command_buf), "cal %d %d", month, year);
  system(command_buf);
}
于 2009-03-31T08:31:46.770 に答える
0

システムを呼び出す前に、コマンドを文字列でフォーマットする必要があります。たとえば、snprintfを使用します

于 2009-03-31T08:26:43.337 に答える
0
char
  string[64];

sprintf( string, "cal %d %d", month, year );

system( string );
于 2009-03-31T08:28:17.153 に答える