Frage

Ok, es mag dumm klingen, aber ich konnte keinen Weg finden, int/char in diesen Systemanruf zu gelangen

Hier ist, wie ich es möchte, dass es funktioniert

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

Ich gehe davon aus, dass mir dies den folgenden Befehl zum Terminal gibt. "cal 3 2009"

Und das Terminal zeigt mir den Kalender vom März 2009.

Aber der Compiler beschwert sich, dass es zu viele Argumente hat

irgendwelche Ideen? Ich muss diese Methode machen system ("cal ") Gibt mir einen dynamischen Kalender zurück.

Anmerkungen: cal Nehmen Sie das Argument cal month year

War es hilfreich?

Lösung

Sie müssen die richtige Befehlszeilenzeichenfolge erstellen. system() Ich werde es nicht für dich tun:

char cmd[64];

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

Die üblichen Einschränkungen um Pufferüberlauf Bewerben Sie sich, obwohl in diesem speziellen Fall, wenn beide Argumente Ganzzahlen sind, ziemlich sicher sein sollten.

Andere Tipps

Machen Sie im Grunde genommen Ihr Printf -Ding aus dem Systemanruf:

char my_cmd[MAX_SIZE];
snprintf(my_cmd, MAX_SIZE, "cal %d %d", month, year);
system(my_cmd);

Sie müssen eine Zeichenfolge übergeben, die bereits alle notwendigen Transformationen vorgenommen hat. Sie können Sprintf () verwenden, um eine solche Schnur zu produzieren. Achten Sie einfach darauf, einen ausreichend großen Puffer zuzuweisen.

Dies geschieht, weil Sie davon ausgehen, dass sich System wie printf verhält, was nicht der Fall ist. Um das zu erhalten, was Sie brauchen, haben Sie zunächst, um die Substitution durch Sprintf in einen Puffer zu erhalten, und übergeben diesen Puffer an das System.

Seien Sie jedoch vorsichtig, dies kann zu einem potenziellen Sicherheitsloch werden, da Sie möglicherweise zulassen, dass unbekannte Parameter bei der Befehlszeilenausführung übergeben werden. Außerdem müssen Sie darauf achten, dass der von Ihnen verwendete temporäre Puffer groß genug ist, um Ihre endgültige Zeichenfolge zu hosten.

Versuchen

#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);
}

Sie müssen Ihren Befehl in einer Zeichenfolge formatieren, bevor Sie mit ihm ein System aufrufen. Verwenden Sie beispielsweise SNPrintf

char
  string[64];

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

system( string );
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top