Hey, so I'm writing a bot for IRC that plays blackjack. The first command is ?join which adds the player to the game. The problem is that, after (player 1) joins the game and (player 2) tries to join, the program thinks (player 2) is already in the game. When I looked into this, I found that the program is putting (player 2)'s name in (player 1)'s spot without running any of the code. I'm not sure if this is a pointer problem or if I messed up somewhere, but I'd really appreciate any help! Here's the code, stripped down to just the ?bot program and the ?join command.

Code:
#include <winsock.h>
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <vector>

#define SERVER "irc.SERVERNAMEHERE.com"
#define PORT 6667
#define TIMEOUT 10
#define NICK "NICKHERE"
#define CHAN "#CHANNELHERE"

using namespace std;


vector<char*> playerName;

// UNCHANGED BOT PROGRAM
typedef struct {
    char *cUserNick;                 // Nickname of user (eg: Tux)
    char *cUserHost;                 // Userhost of user (eg: lenience.com)
    char *cUserName;                 // Username of user (eg: root)
    char *cTarget;                   // Pointer to channel or private chat nick...
    char *cMessage;                  // Message sent by user
} Message_Struct;

bool arrayShift(char *cBuffer);
int socketConnect(SOCKET *connection, char *HName, int Port);
int sockPRINT(SOCKET *strSocket, char* cMessage, ...);
int parseARGS(char **args, char *line);
int parseMessage(SOCKET *strSocket, Message_Struct *sMessage);

int main(int argc, char *argv[]) {
    char cBuffer[512];
    char cOutBuffer[512];
    char *lineSPLIT[512];
    char *args[10];
    int bRecv;
    SOCKET strSocket;
    Message_Struct sMessage;

    int tries;
    for(tries=1; socketConnect(&strSocket, SERVER, PORT)!=0; tries++) {
        printf("Failed attempt: %d\r\n",tries);
        Sleep(TIMEOUT*1000);
    }

    sockPRINT(&strSocket, "USER %s \"\" \"127.0.0.1\" :%s\r\n", NICK, NICK);
    sockPRINT(&strSocket, "NICK %s\r\n", NICK);
    Sleep(100);

    sockPRINT(&strSocket, "JOIN %s\r\n", CHAN);
    printf("Success!\n");

    while(1) {
        memset(cBuffer, 0, 512);
        memset(cOutBuffer, 0, 512);

        bRecv = recv(strSocket, cBuffer, 512, 0);
        if( (bRecv == 0) || (bRecv == SOCKET_ERROR) ) break;

        if(cBuffer[0]!=':') {
            strcpy(cOutBuffer, "PONG :");
            sockPRINT(&strSocket, cOutBuffer);
        } else {
            sMessage.cUserNick = strtok(cBuffer, "!");
            arrayShift(sMessage.cUserNick);
            sMessage.cUserName = strtok(NULL, "@");
            sMessage.cUserHost = strtok(NULL, " "); //THE SENDER IP
            strtok(NULL, " "); //THE PRIVMSG
            sMessage.cTarget = strtok(NULL, " "); //RECEIVED IN CHAT ON CHANNEL / NICK
            sMessage.cMessage = strtok(NULL, "\r\n"); //THE MESSAGE WITH A :

            parseMessage(&strSocket, &sMessage);
        }  
    }
    closesocket(strSocket);
    return (1);
}

bool arrayShift(char *cBuffer) {
    for(int i=0; i<strlen(cBuffer); i++) cBuffer[i]=cBuffer[i+1];
    cBuffer[strlen(cBuffer)]='\0';
    return (1);
}

int socketConnect(SOCKET *connection, char *HName, int Port) {
    SOCKADDR_IN serverInfo;
    WSADATA wsaData;
    LPHOSTENT hostEntry;
    if (WSAStartup(MAKEWORD(1, 1), &wsaData) == -1) return (-1);
    if (!(hostEntry = gethostbyname(HName))) {
        WSACleanup();
        return (-1);
    }
    if ((*connection = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {
        WSACleanup();
        return (-1);
    }
    serverInfo.sin_family = AF_INET;
    serverInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);
    serverInfo.sin_port = htons(Port);
    if (connect(*connection, (LPSOCKADDR)&serverInfo, sizeof(struct sockaddr)) == SOCKET_ERROR) {
        WSACleanup();
        return (-1);
    }
    return (0);
}

int sockPRINT(SOCKET *strSocket, char* cMessage, ...) {
    char cBuffer[512];
    int iError;
    va_list va;
    va_start(va, cMessage);
    vsprintf(cBuffer, cMessage, va);
    va_end(va);
    send(*strSocket, cBuffer, strlen(cBuffer), 0);
    return 1;
}

int parseARGS(char **args, char *line){
int tmp=0;
args[tmp] = strtok( line, "|" );
while ( (args[++tmp] = strtok(NULL, "|" ) ) != NULL );
return tmp - 1;
}
//END UNCHANGED BOT PROGRAM

int parseMessage(SOCKET *strSocket, Message_Struct *sMessage) {
    char *argv[512];
    int argc = parseARGS(argv, sMessage->cMessage);
    
    //JOIN ROUTINE
    else if (argv[0]!= NULL && !strcmp(argv[0], ":?join")) {
         
         int i;
         bool joinError = FALSE;
         
         for (i=0; i<playerName.size(); ++i) {
             if (playerName[i] == sMessage->cUserNick) joinError = TRUE; //  checks to see if player is already in game
         }
         
         if (joinError == FALSE) {
             sockPRINT(strSocket, "\r\nPRIVMSG %s :%c4,0%s has joined the table!\r\n", sMessage->cTarget, 3, sMessage->cUserNick);
             playerName.push_back(sMessage->cUserNick);
         } else sockPRINT(strSocket, "\r\nPRIVMSG %s :%c4,0%s has already joined the table!.\r\n", sMessage->cTarget, 3, sMessage->cUserNick);
    }
    return 0;
}