C Daemon Socket

19Maxi98

Newbie
Registriert
Juni 2015
Beiträge
2
Hallo alle zusammen,

ich habe folgendes Problem:
Ich bin momentan dabei einen Daemon zu programmieren, welcher die Kommunikation zwischen dem Linux Host System und einem Webinterface herstellen soll.

Hier der komplette Code für den Daemon: http://hastebin.com/uwokopafim.coffee
PHP / HTML Script: http://hastebin.com/befosejuva.xml

Nun will ich den gesendeten Command prüfen dies soll hier geschehen:

Code:
  // Empfangene Daten ausgeben
      snprintf(out_str, strlen(command)+1, "%s", command);
      strncat(out_str,resv, n);
      printf("%s\n", out_str);
      char befehl[] = "Befehl: Test";
      if (out_str == befehl) {
        printf("Hallo\n");
      }

Jedoch wird spuckt er mir wenn ich den Command "Test" eingebe nur dies aus:
Code:
root@raspberrypi:/var/www/Webinterface# ./daemon
[Status] Warte auf Verbindung...
[Status] Client verbunden
Befehl: Test
[Status] Warte auf Verbindung...
Eigentlich sollte ja "Hallo" noch zusätzlich ausgeben.

Ich weiß nicht was ich falsch mache, bitte um Hilfe :-/

Mit freundlichen Grüßen

Max
 
Ändere mal Zeile 7:
if (strcmp(out_str, befehl) == 0) {
 
Strings/char-arrays immer mit Methoden vergleichen nicht mit Operatoren, gilt für alle Programmiersprachen.
 
rg88 schrieb:
Strings/char-arrays immer mit Methoden vergleichen nicht mit Operatoren, gilt für alle Programmiersprachen.

Also in C++ kannst du strings prima über die == / != Operatoren auf Gleichheit testen.
 
@Miuwa: In Java und c# gibts das auch.

@antred: aber nur weil, die operatoren da überschrieben sind ;) Am besten nutzt man immer die jeweiligen String-Methoden, dann gibts keine komischen Seiteneffekte, die man erst nach ewig suchen und debugging findet
 
@Miuwa: Nein. Scala, Rust, Python und sicher viele andere.

@rg88: Java hat kein (beeinflussbares) operator overloading

Und mir fällt auf Anhieb eigentlich nur Java ein, wo man per == keinen String-Vergleich macht. Und bei reinem C sind "Strings" eben auch speziell.
 
Zuletzt bearbeitet:
@rg88:
Dass das in Java geht ist mir ehrlich gesagt neu.

In c++ ist die Verwendung von überladenen Operatoren übrigens absolut idiomatisch: Die STL-algorithmen und Datenstrukturen verwenden z.B. standardmäßig "<" oder "==". Compare ist auch für wesentlich weniger Datentypen definiert (mir fällt spontan nur std::string ein).
 
Tumbleweed: Oha, dann hatte ich das falsch in Erinnerung ^^ Kommt davon wenn man ständig zwischen den Sprachen hin und her switchen muss -.-
 
rg88 schrieb:
@antred: aber nur weil, die operatoren da überschrieben sind ;)

Ja und? Das ist jetzt so, als würdest du behaupten, man müßte alle Menschen festbinden, weil sie sonst fortschweben würden, ich darauf erwidere, dass sie auf der Erde ganz fest mit den Füßen am Boden bleiben, und du dann antwortest "aber nur, weil die Schwerkraft sie hält". :p

rg88 schrieb:
Am besten nutzt man immer die jeweiligen String-Methoden, dann gibts keine komischen Seiteneffekte, die man erst nach ewig suchen und debugging findet

Die gibt's auch so nicht. Ist mindestens einer der Operanden ein std::string, gibt's da Null komische Effekte. Höchstwahrscheinlich rufen bei den meisten Implementierungen std::string::compare und operator != / == / etc. unter der Haube sogar die gleichen Funktionen auf.
 
Zurück
Oben