Problem mit String und Semikolon



  • Hi!
    Ich übergeben mit

    FILE *fp;									
    fp = popen(command, "r");
    pclose(fp);
    

    Befehle an die Commandozeile. Bisher habe ich Strings übergeben und diese mit "c_str()" umgewandelt und dann mit command übergeben.

    Jetzt hab ich ein einen String der Form

    printf $'\xAA''\x00''\x3D''\x01''\x0C' > /dev/ttyMFD1

    Wenn ich das einfach so in Putty paste klappts. Aber wenn ich das in meinem C++ Programm paste, dann meckert er aber jetzt und sagt:

    sh: -c: line 0: unexpected EOF while looking for matching `''

    Vermutlich weil er irgendwoe beim Semikolon abbricht und nur irgendwie sowas an die Shell übergibt:

    printf $'

    Wie übergibt man das am besten?

    Christoph



  • Was für semikolons? In deinem Beispiel texte sehe ich keine.



  • Ach sorry. Ich meinte Apostrophs. Fast dasselbe...


  • Mod

    Wenn du ein Zeichenkettenliteral wie "Hallo Welt" hast, das selber ein " enthält, dann musst du das " escapen, weil es sonst für das Ende der Zeichenkette gehalten wird. Vergleiche mal das Syntaxhighlighting hier im Forum; rot ist der Teil, der für die Zeichenkette gehalten wird:

    puts("bla " blupp");  //falsch
    
    puts("bla \" blupp");  // richtig
    

    Ebenso natürlich für ' innerhalb eines Zeichenliterals.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum Linux/Unix in das Forum C (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ok. Kann ich soweit nachvollziehen. Trotzdem hab ich da noch Probleme.
    Also mein String, der am Ende in der Linux Shell landen soll, lautet ganz konkret:

    printf $'\xAA''\x00''\x3E''\x01''\x00' > /dev/ttyMFD1

    Nach dieser Tabelle soll ein ' durch \' und ein \ mit \\ escaped werden.

    Wenn ich as der Funktion übergebe:

    printf $\'\\xAA\'\'\\x00\'\'\\x3E\'\'\\x01\'\'\\x00\' > /dev/ttyMFD1; usleep 50000;

    kommt das im Funktionsrumpf an:

    printf $\'\\xAA\'\'\\x00\'\'\\x3E\'\'\\x01\'\'\\x00\' > /dev/ttyMFD1; usleep 50000;

    Da wird dann irgendwie gar nichts escaped.
    Was nache ich da falsch?



  • Die einfachen Gänsefüßchen müssen(dürfen) nicht escaped werden.



  • Caligulaminus schrieb:

    Die einfachen Gänsefüßchen müssen(dürfen) nicht escaped werden.

    Wieso sind die dann im Fall von nicht dürfen in dieser Tabelle aufgeführt?



  • Ups. Ich irrte.
    Sie müssen nicht escaped werden, ich dachte, daß es deswegen auch verboten ist.

    edit:

    D.h.
    printf $'\\xAA''\\x00''\\x3E''\\x01''\\x00' > /dev/ttyMFD1
    und
    printf $\'\\xAA\'\'\\x00\'\'\\x3E\'\'\\x01\'\'\\x00\' > /dev/ttyMFD1
    sind equivalent.

    Bei deinem
    printf $\\'\\xAA\\'\\'\\x00\\'\\'\\x3E\\'\\'\\x01\\'\\'\\x00\\' > /dev/ttyMFD1; usleep 50000;
    hast Du es eindeutig mit den \ übertrieben.


Log in to reply