c++ char verbinden?

Hi!


Wie kann ich 3 chars verbinden a la
Code:
system("copy "+argv[0]+"C:\\Dokume~1\\ALL~1\\Startme~1\\Autost~1\\init.exe");

MfG Blacki
 
Code:
#include <string.h>
#include <stdlib.h>
// ...



//...
char command[250];
strcpy(command,"copy ");
strcat(command, argv[0]);
strcat(command,"C:\\Dokume~1\\ALL~1\\Startme~1\\Autost~1\\init.exe");
system(command);
//...

so sollte es gehen :-)
 
Nimm bei Angaben die der User beeinflussen kann lieber strncat sonst riskierst du einen Bufferoverflow. Wenn du das ganze dann in einem Programm mit Netzwerkfunktionen vergisst, ermöglichst du remote exploits.
(Ich weiß, dass es bei dem Dateinamen etwas unrealistisch ist, aber lieber sollte man es sich gleich richtig angewöhnen).

Edit: Verdammt, zu spät.
 
Code:
#include <string>

std::string s("copy ");
s=s + argv[0];
s=s + "C:\\Dokume~1\\ALL~1\\Startme~1\\Autost~1\\init.exe";
 
Also wegen dem Buffer Overflow *G* da kann man sichs natürlich auch etwas umständlicher machen, was ich mit ersparen wollte, da ich nur strcat() zeigen wolle ;)

Aber hier halt eine (hoffentlich) bessere Variante ;)

Code:
#include <string.h>
#include <stdlib.h>
// ...



//...
char * command;
command = new char[(strlen(argv[0])+51];
if(command!=NULL){
    strcpy(command,"copy ");
    strcat(command, argv[0]);
    strcat(command,"C:\\Dokume~1\\ALL~1\\Startme~1\\Autost~1\\init.exe");
    system(command);
    delete [] command;
}
else {
    /* Fehlerbehandlung */
}
//...
 
Hi!


Danke für die Antworten!!!

aber argv[0] ist doch der Programmname!
z.B.

cmd => init.exe param1 param2
argv[0] argv[1] argv[2]

Oder bin ich da falsch informiert?


MfG


Blacki

EDIT:
Dev-C++:
16 C:\Dev-Cpp\main.cpp cannot convert `std::string' to `const char*' for argument `1' to `int system(const char*)'

M$ Visual C++:
C:\Programme\Microsoft Visual Studio\MyProjects\htp\htp.cpp(17) : error C2664: 'system' : Konvertierung des Parameters 1 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'const char *' nicht moeglich
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
Fehler beim Ausführen von cl.exe.
 
Stimmt schon, aber es war eher als allgemeiner Ratschlag gedacht, dass du Daten, deren Inhalt und Länge der User bestimmt, nicht ohne Prüfung in einen begrenzt großen Buffer packen solltest.
 
Thx!

EDIT: Windows macht wieder Ärger!
Wie bekomme ich das
copy C:\xxx xxx.exe
zu
copy "C:\xxx.exe" "xxx.exe"


Hier der ganze Quellcode:

Code:
// htp.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{

	string path(" D:\\Dokumente und Einstellungen\\All Users\\Startmen");
	path = path+ (char)129;
	path = path+ "\\Programme\\Autostart\\init.exe";
	string s("copy ");
    s=s + argv[0];
	s=s + ".exe";
	s=s + path;
    system(s.c_str());
	cout << s;
	s= "copy ";
    s=s + argv[0];
	s=s + path;
    system(s.c_str());
	cout << endl << s <<endl;
	
	
	
	return1;
}
 
Zurück
Oben