Meine Anwendung stürzt ab, wenn ich versuche, den Puffer zu drucken. Ansonsten funktioniert es gut. Dieser ist der Code:Wie gebe ich ein Zeichen von einer Funktion zurück, die Winsock zum recv vom Sockel verwendet?
irc.h
class IRC
{
public:
void sockconnect(char * hName, int portNum);
void sockwrite(char* sendbuf);
char sockread(void);
bool connected;
private:
WSADATA wsaData;
SOCKET m_socket;
sockaddr_in clientService;
LPHOSTENT hostEntry;
};
irc.cc
char IRC::sockread(void)
{
int result;
char buffer[DEFAULT_BUFLEN];
result = recv(m_socket, buffer, DEFAULT_BUFLEN, 0);
if (result > 0) {
return *buffer;
}
else if (result == 0)
{
connected = false;
return *buffer;
}
else {
printf("recv failed with error: %d\n", WSAGetLastError());
return *buffer;
}
}
main.cc
IRC client;
while (client.connected == true) {
char buffer = client.sockread();
if (buffer == NULL)
break;
printf ("Buffer: %s\n",buffer);
}
Entschuldigung, ich verstehe nicht. Mache ich das nicht schon? – thorvald
@thorvald: Nein, eigentlich gibst du nur das erste Zeichen zurück. Siehe meine Bearbeitung –
Sie geben ein einzelnes Zeichen zurück (das erste Zeichen in Ihrem Puffer) und Sie versuchen, dieses Zeichen als String (ein Null beendet char *) – nos