Segmentation fault - kleiner code!
-
OK danke!
Ich habe es nun so gemacht und es kommt kein fehler... leider ist es aber auch nicht das was ich wollte! Denn bei write wird der NULL byte nicht mitgesendet! Das muss aber unbedingt sein.. Alle Versuche ein NULL Byte dran zu hängen (strcut) oder die länge einfache +1 scheitern mit den selben fehler wie oben.void sending::sendto(int fd,const char *ch) { printf("sende: %s\n",ch); int len=strlen(ch); write(fd,ch,len); }
-
Also wenn du ein Byte mit dem Wert 0 in eine Datei schreiben willst, dann wirst du wohl eine Binärdatei haben, oder?? Ansonsten macht es nämlich nicht viel Sinn.
-
Sicher, dass die 0 nicht mitgesendet wird, wenn du len um 1 erhöst? Ansonsten ist es ja auch kein großes Problem die Nullterminierung bei read vorzunehmen
ssize_t n=read(fd,buffer,length-1); if(n!=-1) buffer[n+1]=0;
aber jetzt ist das Problem doch kein ANSI C Problem mehr und es kann wieder zurück verschoben werden...
btw. schau dir mal die Definition von man: strlen(3) und von man: write(2) an. Beide erwarten size_t; denkst du wirklich, dass du int und nicht lieber size_t nehmen solltest
@AJ
Binär gibt es nicht unter Unix :). Außerdem sieht das mehr nach schreiben aus.
-
@kingruedi
Hätte ja sein können :).Soll ich den Beitrag jetzt wieder zurück ins Linux-Forum schieben?
-
Hallo
Das ganze ist ne Chatserver.. und der Client erwartet halt eine "\0" am ende.
Werde es wohl mit 2 write befehlen lösen müssen... in mein C++ Buch steht strlen = int. hm...Tja ich werd wohl verschiedende sachen versuchen müssen...
-
Was macht dieser Beitrag im "ANSI C" Forum?
Das ist doch eigendlich C++!!!
//sending::sendto
//writeoder?
-
Ist halt ein übergreifendes Thema...
-
@chille
Dass die Funktionen innerhalb einer Methode einer Klasse aufgerufen werden, ist beim Problem an sich wohl eher Nebensache ;). write() ist zwar kein ANSI-C Standard, aber dennoch C und nicht C++.
-
Mein Fehler besteht immer noch..
void sending::sendto(int fd,const char *ch)
{
if(DEBUGMODE) printf("sende: %s",ch);write(fd,ch,strlen(ch));
}Er gibt den richtigen text aus, aber bei write kommt dann sofort der fehler... (segmentation fault) Es ist ja nix falsch daran... gibt es vielleicht eine Alternative zu write die ich mal versuchen könnte?
-
so kann man keinen Fehler erkennen, hast du mal mit dem Debugger geguckt?
chille07 schrieb:
Das ist doch eigendlich C++!!!
Ne, dass ist mehr C mit Klassen