2016-09-09 17 views
1

Ich kann die Umleitung von der Befehlszeile aus arbeiten, aber ich kann die Umleitung von meinem C-Code nicht funktionieren. Irgendwelche Vorschläge werden sehr geschätzt!Windows-System-Befehlsumleitung in c

// Dies funktioniert: -hashfile Befehl erfolgreich abgeschlossen.

memset(&tchar[0], 0, sizeof(tchar)); 
sprintf(tchar, "certutil -hashfile \"\%s\"\ MD5", output_file); 
system(tchar); 

Dies gilt nicht -> Fehler: Erwartet nicht mehr als 2 args erhielt 4

sprintf(tchar, "certutil -hashfile \"\%s\"\ MD5 ^> "\C:\\TEMP\\image.cksm\"\"", output_file); 

Antwort

1

Es gibt Probleme mit sprintf ‚s Format Argument, das ungültig ist:

  • Kompilierungsfehler: die dblquote (") von " \ C: \ ... beendet die Formatzeichenfolge und macht den Rest (Pfad) ungültig.
  • Laufzeitfehler: die Einfügemarke (^) aus ^> macht die folgende Umleiten Operator (>) als Literal behandelt werden (als Folge als Programmargument; gleiche Sache mit der folgende Dateiname), also certutil erhält 4 Argumente statt (die erwartete) 2. Sie müssen nur spezielle Zeichen entkommen, wenn Sie sie als Literale behandeln wollen, und ihre spezielle Bedeutung verwerfen.
  • Einige über (C) Entkommen: die 2. und 4. Schrägstriche (\) aus \ "\% s \" \ - nicht kritisch, aber über erschwert die Saite.

es funktioniert, um den Code zu ändern:

sprintf(tchar, "certutil -hashfile \"%s\" MD5 > \"C:\\TEMP\\image.cksm\"", output_file); 
+0

Danke für die Anregung, aber es hat immer noch den gleichen Fehler: Erwartet nicht mehr als 2 args erhielt 4 –

+0

Das ungerade ist ... Was ist die _Win_ Version, und welchen Compiler benutzen Sie? Ich kompilierte es erfolgreich mit _VStudio21k0_ und lief es auf _Win10_. – CristiFati

+0

Windows 7 mit einem LabWindows CVI-Compiler von National Instruments. –