Frage

Ich möchte ein Programm erstellen, das in wenigen IDs auf verschiedenen Protokollen protokolliert, die Nachrichten empfängt und Antworten auf verschiedene Nachrichten (Befehle) gibt.

Beispiel:

mich: wer
Bot: Ich bin ein libpurple angetriebener Bot.

Der Code sieht so aus:

static void received_im_msg(PurpleAccount *account, char *sender, char *message,
                              PurpleConversation *conv, PurpleMessageFlags flags)
{
    if (conv==NULL) {
        conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, sender);
    }

    printf("%s: %s\n", sender, message);

    char *answer;

    if (message == "who") {
        answer="I'm a libpurple powered bot.";
    } else if (message=="hello") {
        answer="Hello, my firend!";
    } else {
        answer="Unknown command.";
    }
    //print the answer, so we can see it in terminal:
    printf("bot: %s\n",message);  

    //send the message:
    purple_conv_im_send(purple_conversation_get_im_data(conv),answer);
}

Für mich sieht dieser Code einfach in Ordnung aus, funktioniert aber nicht wie erwartet. Jede Nachricht, die der Bot erhält, wird die Antwort immer sein Unbekannter Befehl.. Ich kann nicht verstehen, warum das

message == "who"

ist nicht wahr, auch wenn

printf("%s: %s\n", sender, message);

druckt so etwas wie:
Beispiel_id_345: wer.

Haben Sie eine Vorstellung davon, warum dieses Ding passiert? Was habe ich falsch gemacht?

Danke und Entschuldigung für mein schlechtes Englisch.

War es hilfreich?

Lösung

Sie müssen die verwenden strcmp Funktion:

if (strcmp(message, "who") == 0) {
    answer="I'm a libpurple powered bot.";
} else if (strcmp(message, "hello") == 0) {

== Überprüft, ob die Zeiger dieselbe Adresse enthalten, was nicht das ist, was Sie wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top