[C] ostrzeżenia przy kompilacji

0

Witajcie, mam problem z formatem timestamp na zwykłą datę. Podczas kompilacji mam ostrzeżenia, które skutkują "crash'em" po włączeniu programu do którego tworzę ten plugin.

Kod:

void ts3plugin_infoData(uint64 serverConnectionHandlerID, uint64 id, enum PluginItemType type, char** data) {
    char* firstconnected;
    char* lastconnected;

    switch(type) {
            break;
        case PLUGIN_CLIENT:

            if (ts3Functions.getClientVariableAsString(serverConnectionHandlerID, (anyID)id, CLIENT_CREATED, &firstconnected) != ERROR_ok) {
                printf("Error getting client nickname\n");
                return;
            }

            if (ts3Functions.getClientVariableAsString(serverConnectionHandlerID, (anyID)id, CLIENT_LASTCONNECTED, &lastconnected) != ERROR_ok) {
                printf("Error getting client nickname\n");
                return;
            }

            break;
        default:
            printf("Invalid item type: %d\n", type);
            data = NULL;
            return;
    }

    url = url_encode(uid);

    char buffer1[80];
    strftime(buffer1, 80, "%Y-%m-%d %X", firstconnected);

    char buffer2[80];
    strftime(buffer2, 80, "%Y-%m-%d %X", lastconnected);

    *data = (char*)malloc(INFODATA_BUFSIZE * sizeof(char));
    snprintf(*data, INFODATA_BUFSIZE, "\n[b]Version:[/b] %s\n[b]Connections[/b]: %s\n[b]Database ID:[/b] %s\n[b]First connect: |%s|\n[b]Last connect:[/b] %s\n[b]On ts3index:[/b] [URL=http://ts3index.com/?page=searchclient&uid=%s]%s[/URL]", version, totalconnections, dbid, buffer1, buffer2, url, uid);
    ts3Functions.freeMemory(firstconnected);
    ts3Functions.freeMemory(lastconnected);
}

Z góry dziękuję za pomoc, bo kompletnie nie wiem co jest nie tak, jest to mój drugi dzień z tym językiem dopiero.

0

switch(type) { break;

lol

0
wujnia napisał(a):

switch(type) { break;

lol

Nie rozumiem cię.. możesz jaśniej?

0

wklej to normalnie jako C kod i daj te ostrzezenia kompilatora.

0

Czy to jest na pewno C?
Ta linijka: if (ts3Functions.getClientVariableAsString(serverConnectionHandlerID, (anyID)id, CLIENT_CREATED, &firstconnected) != ERROR_ok) wygląda jak kulawa mieszanka C i C++.

lekosm2 napisał(a):

Witajcie, mam problem z formatem timestamp na zwykłą datę. Podczas kompilacji mam ostrzeżenia, które skutkują "crash'em" po włączeniu programu do którego tworzę ten plugin.

Ostrzeżenia to tylko sugestie od kompilatora, że coś nie tak jest z tym kodem. A crash jest dowodem, że faktycznie kod jest niepoprawny.

Patrzę w tą funkcję i widzę, że jedyny sposób bu to działało, to zmienne globalne: url oraz uid.
Patrzę na dokumentację http://www.cplusplus.com/reference/ctime/strftime/ i na twój kod i jeszcze bardziej drapie się w głowę, tam gdzie powinniem być wskaźnik na const struct tm jest char *. Czy to się na pewno buduje? IMO to nie powinien być warrning ale zwykły error (choćby podczas linkowania). Zapewne to jest powód crash-a.

Radzę wrócić od podstaw zanim będziesz pisał coś większego/poważniejszego, w tej chwili ten kod to chaotyczna próba zrobienia czegoś bardziej skomplikowanego.

Twój kod pokolorowany (dodane "c" zaraz po ```):

void ts3plugin_infoData(uint64 serverConnectionHandlerID, uint64 id, enum PluginItemType type, char** data) {
    char* firstconnected;
    char* lastconnected;

    switch(type) {
            break;
        case PLUGIN_CLIENT:

            if (ts3Functions.getClientVariableAsString(serverConnectionHandlerID, (anyID)id, CLIENT_CREATED, &firstconnected) != ERROR_ok) {
                printf("Error getting client nickname\n");
                return;
            }

            if (ts3Functions.getClientVariableAsString(serverConnectionHandlerID, (anyID)id, CLIENT_LASTCONNECTED, &lastconnected) != ERROR_ok) {
                printf("Error getting client nickname\n");
                return;
            }

            break;
        default:
            printf("Invalid item type: %d\n", type);
            data = NULL;
            return;
    }

    url = url_encode(uid);

    char buffer1[80];
    strftime(buffer1, 80, "%Y-%m-%d %X", firstconnected);

    char buffer2[80];
    strftime(buffer2, 80, "%Y-%m-%d %X", lastconnected);

    *data = (char*)malloc(INFODATA_BUFSIZE * sizeof(char));
    snprintf(*data, INFODATA_BUFSIZE, "\n[b]Version:[/b] %s\n[b]Connections[/b]: %s\n[b]Database ID:[/b] %s\n[b]First connect: |%s|\n[b]Last connect:[/b] %s\n[b]On ts3index:[/b] [URL=http://ts3index.com/?page=searchclient&uid=%s]%s[/URL]", version, totalconnections, dbid, buffer1, buffer2, url, uid);
    ts3Functions.freeMemory(firstconnected);
    ts3Functions.freeMemory(lastconnected);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0