Problem mit String und Semikolon
-
Hi!
Ich übergeben mitFILE *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...
-
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.