In argv schreiben harmlos?



  • Hallo,
    bekanntlich wird die main-Routine in C/C++ folgendermaßen deklariert:
    int main(int argc, char** argv)

    Nun folgende Frage dazu: in argv[1] soll ein Dateiname übergeben werden (falls argc==1 ist, wird es natürlich entsprechend abgefangen).

    Die Ausgabe soll in einer Datei mit einem Namen mit "vor dem Punkt das selbe", aber anderer Dateiendung erfolgen.

    Ich könnte einen String allokieren (Pseudocode!):
    char* outputfilename=malloc(Länge des argv[1]-Strings), diesen mit dem Inhalt von argv[1] füllen (über memcpy) und anschließend die letzten 4 Zeichen ändern.

    Es ginge jedoch speichersparender, wenn man direkt die letzten 4 Zeichen von argv[1] änderte und dann fopen(argv[1]) durchführt.

    Die Frage:
    ist es gefährlich in argv zu schreiben? Ich meine vielleicht wird argv zu irgendeinem anderen Zweck im Betriebssystem benutzt, weshalb man Änderungen da vermeiden sollte? Oder vielleicht gibt es einen anderen Grund es zu unterlassen in argv zu schreiben?
    Mit herzlichem Dank im Vorweg für eure Hilfe
    Wolfgke



  • Grundsätzlich ist es erlaubt, die Strings in argv direkt zu ändern. Nur beachte folgendes

    C99 schrieb:

    The parameters argc and argv and the strings pointed to by the argv array shall
    be modifiable by the program, and retain their last-stored values between program
    startup and program termination.

    Und natürlich solltest du auch darauf achten, dass du nicht mehr Zeichen schreibst, wie in den originalen Strings vorhanden sind.



  • Danke, groovemaster.


Anmelden zum Antworten