PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: char* und char[] >> 'Strings' in C >> no Durchblick


Gast
2006-04-11, 17:44:05
Hi,

ich bastle gerade etwas mit Pipes herum und scheitere mal wieder am fürchterlichen C.

Ich lese etwas von der Tastatur ein nach 'cmd' -- char cmd[50]

Dann möchte ich eine Pipe erstellen mit cmd als Parameter.

pipe = popen(cmd, "r");

Beim Kompilieren wird aber wegen eines inkompatiblen Typs gemeckert.
--> ??


Und:
Ich lese wiederholt etwas von der Tastatur ein (mit fgets) und möchte bei einer Eingabe von 'schluss' das Programm beenden.

char in[30];

fgets(in, 30, stdin);
if (in == "schluss") // ... ende
if (strcmp(in, "schluss") == 0) // ... ende

Beides funktioniert nicht und das Programm läuft weiter.
--> ??

mithrandir
2006-04-11, 18:37:20
Dere!

ad1: Koennte evtl. daran liegen, dass popen zwei const char * Parameter haben moechte.

ad2: Stringverlgeiche funktionieren in C mit strcmp, nicht mit ==. Hast du dir in schon einmal angeschaut? Wenn ich mich recht erinnere gab es da einen Unterschied zwischen gets und fgets. Eines davon hatte immer ein NEWLINE Zeichen im Puffer beim Lesen von der Standardeingabe.

bye, Peter

Gast
2006-04-11, 19:32:18
Dere!

ad1: Koennte evtl. daran liegen, dass popen zwei const char * Parameter haben moechte.

ad2: Stringverlgeiche funktionieren in C mit strcmp, nicht mit ==. Hast du dir in schon einmal angeschaut? Wenn ich mich recht erinnere gab es da einen Unterschied zwischen gets und fgets. Eines davon hatte immer ein NEWLINE Zeichen im Puffer beim Lesen von der Standardeingabe.

bye, Peter
1. Aha, und wie bekomme ich char cmd[] nach const char*?
Oder: Wie lese ich etwas in eine const char* Variable mit fgets?

Das eine will char[], das andere char* ... irgendwie muss es doch eine Brücke zwischen beiden geben?
--> nichts versteh

2. Ja, mit strcmp habe ichs ja auch schon probiert (siehe oben). :(

Aqualon
2006-04-11, 19:57:17
fgets liest das newline mit ein, strcmp(in, "schliessen\n") sollte funktionieren.

Aqua

Sephiroth
2006-04-16, 16:02:05
Zur Info:
Die Beiträge zur Frage Was ist formal "richtiger" (also Standard)?
char* name;
oder
char *name;
befinden sich nun in hier.

Vielleicht könnten die Herren in Zukunft auch mal selbst auf die Idee kommen einen eigenen Thread zu erstellen, wenn es nichts mehr mit dem ursprünglichen Thema zu tun hat. (bzw. rechtzeitig melden)