sytem() gibt nicht den vollständigen string aus (bei verwendung mit objekten)



  • Hallo,

    ich beschäftige mich seit diversen Stunden mit einem seltsamen Problem.

    wenn ich die system() Funktion mit mehreren Variablen verwende, wird der String nach der ersten Variablen abgeschnitten (als wäre er dort schon 0 terminiert)
    Dieses Problem tritt allerdings nur dann auf, wenn die Variablen nicht innerhalb dieser Funktion erstellt werden.

    Beispiel nicht funktionsfähig:

    class stringClass {
      public:
        string  strA, strB;
    }
    
    stringClass* mystrings = new stringClass()
    str->strA = "eins";
    str->strB = "drei";
    
    bool works(string a, string b) {
        string cmd = "echo " +a + " text " +b;
        system(cmd.c_str());
    }
    

    ein aufruf von works(mystrings->strA, "zwei") bewirkt ein:
    echo eins
    und dann ist ende.

    Beispiel funktionsfähig:

    bool works() {
       string a = "eins";
       string b = "zwei";
       string cmd = "echo "+a+" text "+b;
       system(cmd.c_str());
    }
    

    dies führt zum korrekten Ergebnis:
    echo eins text zwei

    Kann mir jemand sagen woran dies liegt ?
    Wenn ich cmd zuvor mittels cout ausgebe bekomme ich den korrekten String in voller Länge.

    Vielen Dank für jede Hilfe.

    Liebe Grüße,
    Andy



  • Ersetze:

    stringClass* mystrings = new stringClass()
    str->strA = "eins";
    str->strB = "drei";
    

    durch:

    stringClass* mystrings = new stringClass()
    mystrings->strA = "eins";
    mystrings->strB = "drei";
    

    Dann gehts! 😉



  • sorry, hatte den Code gekürzt, dabei ist mir dieser Fehler unterlaufen, so würde es ja nichtmals kompilieren.

    Ich habe es genau so, und dann ist nach der ersten Variablen ende.
    gebe ich es allerdings mittels cout auf die konsole sieht alles ok aus, nur bei system besteht dieses Problem (scheinbar).



  • Bei mir wird in beiden Fällen

    eins text zwei

    ausgegeben. Sehe auch keinen Grund, warum das nicht so sein sollte!



  • ok, vielen Dank.

    Das ist schonmal etwas, ich werde das mal auf einer anderen Maschine kompilieren und dort prüfen.
    Ich verzweifle hier nämlich auch so langsam, da ich nämlich auch keien Grund für die Trennung des strings sehe.


Anmelden zum Antworten