Le découpage d'une chaîne avec strtok_s

Je suis en train de découper une chaîne par un délimiteur spécifié selon cet exemple: http://msdn.microsoft.com/en-us/library/ftsafwz3(v=VS.90).aspx

Mon code compile sans erreur dans Visual C++ 2010, mais lorsque je veux l'exécuter, j'obtiens ce message d'erreur:

Exception non gérée à 0x773a15de dans Test.exe: 0xC0000005: violation d'Accès lecture de l'emplacement 0x00000000.

Voici mon code:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <regex>

using namespace std;

vector<char *> splitString(char in[])
{
vector<char *> parts(15);
char seps[]   = " ,\t\n";
char *next_token1 = NULL;
char *token1 = NULL;
token1 = strtok_s(in, seps, &next_token1);
while ((token1 != NULL))
{
    if (token1 != NULL)
    {
        token1 = strtok_s( NULL, seps, &next_token1);
                    //printf( " %s\n", token1 );
        parts.push_back(token1);
    }
}
return parts;
}

int main(int argc, char * argv[])
{
char string1[] =
    "A string\tof ,,tokens\nand some  more tokens";
vector<char *> parts=splitString(string1);
cout << parts[0] <<endl;
cout << parts[1] <<endl;
return 0;
}

Il semble être illégal que j'essaie d'afficher le vecteur des éléments, mais pourquoi?

Le vecteur de la capacité doit être suffisante et un

printf( "%s\n", token1 );

dans la boucle while imprime les jetons!

  • Notez qu'outre le problème avec l'accès non valide adressée par hmjd réponse, vous êtes de jeter le premier jeton.
InformationsquelleAutor bogus | 2012-10-03