C++ zu C
-
Hi,
ich will von c++ etwas in c schreiben, leider kann ich kein c++ wodurch ich es nicht umschreiben kann.
Kann mir jemand das erklären:static std::vector<std::string> Arguments; void AddBootArgument(const char * argv) { std::string arg(argv); Arguments.push_back(arg); }mfg
-
Die Funktion
AddBootArgumentfügt dem dynamischen ArrayArgumentsden String inargvhinzu. Das sollte auch ohne C++-Kentnisse leicht in C implementierbar sein.
-
//static std::vector<std::string> Arguments; static const char** Arguments; // dynamisches Array von Strings void AddBootArgument(const char * argv) { //std::string arg(argv); const char* arg = strcpy ( arg, argv ); // string von argv in arg kopieren //Arguments.push_back(arg); Arguments[next_index] = arg; // string in Array einfügen mit next_index, wo das geschen soll }Sollte in etwa stimmen. Auf jeden Fall solltest du eine Idee bekommen.
-
Danke, mehr wollt ich nicht

mfg
-
drakon schrieb:
const char* arg = strcpy ( arg, argv ); // string von argv in arg kopieren.Mit
strcpy()aufpassen, sonst krachts.
-

Was ist daran nicht in Ordnung?Für das ganze sollte natürlich eigentlich ein anständiger Wrapper her, damit man sich nicht mit dem ganzen Lowlevel Zeugs rumschlagen muss, aber das Beispiel sollte in Ordnung sein (von den offensichtlich nötigen assertions mal abgesehen).
-
drakon schrieb:
void AddBootArgument(const char * argv) { const char* arg = strcpy ( arg, argv );
Müsste das nicht so aussehen?void AddBootArgument(const char * argv) { char* arg = (char*)malloc(strlen(argv)+1); if (!arg) { // Fehlerbehaldung, falls kein Speicher mehr vorhanden } strcpy(arg,argv); ...
-
Ich mach zwar schon seit Ewigkeiten kein C mehr, aber das ging doch inklusive Speicher besorgen auch so:
const char* arg = strdup ( argv );Lars
-
manni66 schrieb:
Ich mach zwar schon seit Ewigkeiten kein C mehr, aber das ging doch inklusive Speicher besorgen auch so:
Nicht in reinem C. Man findet die Funktion im POSIX Standard.
@krümelkacker & Nexus,
drakon hat das wohl als Pseudo-C-Code verstanden. WSK wollte ja nur erfahren, was da in etwa passiert und nicht einen korrekten äquivalenten C Code.Grüssli