Brauche Erklärung für Funktionsaufruf mit einem char array
-
Hallo!
In der Header Datei wird char m_buf;* deklariert. Im Konstruktor wird m_buf zu NULL gesetzt und später wird m_buf = new char [dlen] aufgerufen. Ich sollte also ein char array der Länge dlen haben. Später wird die Funktion receive(char buf, int a, int b)* mit receive(m_buf+recbytes, rec, 5000) aufgerufen. recbytes ist ein integer. Und ich habe keine Ahnung was mir das "m_buf+recbytes" sagen soll. Vielleicht kann mir ja jemand von euch helfen.
Thx
Blackfyre
-
Hmmm was das in dem Zusammenhang soll,
keine Ahnung. Allgemein kann man eben indem
man auf einen Zeiger einen Integer addiert die
Adresse auf die der Zeiger zeigt eben ändern.
Zum Beispiel wir haben die Adresse:0x561AFC31Wenn man jetzt zum Beispiel da 8 addiert hat man eben
nachher0x561AFC39Also bei einem Array kannste zum Beispiel ja
char* array; array = new char[500]; array = 'a'; // 'a' im ersten Platz des Arrays array += 4; // array zeigt jetzt auf das zweite Element array-4 = 'b'; // würde jetzt das 'a' von vorher überschreibenSo ungefähr sollte das sein

Vlt kannste ja damit was anfangen,
Gruß,
Max
-
Ah, nach der Erklärung würde es heißen, dass receive(...) die Addresse im Array bekommt, an der es anfangen soll das Array zu beschreiben. Das macht Sinn. Danke!
-
der Ausdruck m_buf + recbytes liefert einen Zeiger, der auf das (recbytes+1)'te Element des char-Arrays zeigt. kleines Beispiel:
char* m_buf = new char[100](0); std::strncpy(m_buf, "Hallo Welt!", 11); //in dem Array, auf das m_buf zeigt steht jetzt "Hallo Welt!\0\0\0\0" usw. int recbytes = 3; receive(m_buf+recbytes, 50,100); //receive bekommt jetzt einen Pointer auf "lo Welt!\0\0\0m_buf+recbytes ist das selbe wie &m_buf[recbytes]
sind die ersten "recbytes" chars in dem C-String für einen anderen Zweck vorgesehn und für receive nicht wichtig.blub² schrieb:
array += 4; // array zeigt jetzt auf das zweite ElementIst natürlich Humbug, vermutlich ein Tippfehler. Array zeigt auf das fünfte Element.
Ich frag mich allerdings, was das für eine Klasse ist, die so schamlos mit Olscool C-Style Arrays und Pointeroffsets rumfrickelt. Das sieht son bisschen nach einer billigen Kaschierung einer C-API oder so etwas aus.
-
Ja, war ein Tipp-Fehler meinerseits.
Was ist das denn für eine receive Funktion?
Receive würde ich jetz mal spontan winsock sagen?
Wenn das echt n WinSock Wrapper ist dann ein ziemlich
alter *g*
-
Jupp, receive ist dazu da Daten von einem socket zu empfangen. Das Programm ist meines Wissens nach etwa fünf Jahre alt und besitzt keinerlei Dokumentation. Ist natürlich besonders lustig wenn der Server nur Antwortet wenn er die richtige "Frage" gestellt bekommt.
Naja, Dokus machen das Leben ja langweilig.