проблема strtok в Visual C ++ - PullRequest
       2

проблема strtok в Visual C ++

2 голосов
/ 02 июля 2010

Я пробую strtok в Visual C ++, но, похоже, не работает. Это не первый раз, когда я использую strtok, но я просто не могу понять, что с ним не так. код довольно прост.

в основном

 cout<<getLevels("/'Group'/'Channel1'")<<endl;

в getLevels ()

int getLevels(char * fullPath){
 int level=0;
 char *nextToken;
 char * pch=strtok_s(fullPath, "/", &nextToken);// broken at here
 while(pch!=NULL){
  level++;
  cout<<level<<":"<<pch<<endl;
  pch=strtok_s(NULL, "/",&nextToken);
 }
 return level;

}

разрывается на линии

 char * pch=strtok_s(fullPath, "/", &nextToken);

с ошибкой:

Unhandled exception at 0x10273de8 (msvcr100d.dll) in tdmsTest.exe: 0xC0000005: Access violation writing location 0x0041c840.

и курсор указывает на эту строку в strtok_s.ini

 for ( ; *str != 0 ; str++ )
    {
        if (map[*str >> 3] & (1 << (*str & 7)))
        {
            *str++ = 0; // pointing here
            break;
        }
    }

Я пробовал это в strtok () вместо strtok_s () раньше, но у него та же проблема. Кто-нибудь может сказать мне, что не так с моим кодом?

Ответы [ 3 ]

4 голосов
/ 02 июля 2010

Функция strtok() будет изменять ее аргумент.Вы вызываете его для строкового литерала, который обычно находится в хранилище только для чтения.

2 голосов
/ 02 июля 2010

Strtok пытается разделить строку, вставляя нули вместо токенов. Я предполагаю, что литерал "/ 'Group' / 'Channel1'" хранится как константа и не может быть изменен.

Попробуйте удалить флаг «Включить объединение строк (/ GF)» из параметров компилятора.

1 голос
/ 02 июля 2010

Проблема в том, что вы используете инсульт.Перестань!!!Инсульты вредны для ума.Используйте Boost.Tokenizer .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...