strtok использует неправильный разделитель - PullRequest
0 голосов
/ 10 августа 2010

Почему мои strtok разбивают мои строки после пробела, когда я указал свой разделитель как ","?

Ответы [ 2 ]

7 голосов
/ 10 августа 2010

Я могу только предположить, что вы делаете что-то не так, хотя немного сложно точно сказать, что именно (вы должны, как правило, публиковать свой код, когда спрашиваете об особенностях). Кажется, что примеры программ, вроде следующих, работают нормально:

#include <stdio.h>
#include <string.h>

int main (void) {
    char *s;
    char str[] =
        "This is a string,"
        " with both spaces and commas,"
        " for testing.";
    printf ("[%s]\n", str);
    s = strtok (str, ",");
    while (s != NULL) {
        printf ("   [%s]\n", s);
        s = strtok (NULL, ",");
    }
    return 0;
}

Это выводит:

[This is a string, with both spaces and commas, for testing.]
   [This is a string]
   [ with both spaces and commas]
   [ for testing.]

Единственная возможность, которая сразу приходит на ум, - это если вы используете " ," вместо ",". В этом случае вы получите:

[This is a string, with both spaces and commas, for testing.]
   [This]
   [is]
   [a]
   [string]
   [with]
   [both]
   [spaces]
   [and]
   [commas]
   [for]
   [testing.]
0 голосов
/ 10 августа 2010

Спасибо!Я огляделся и обнаружил, что проблема была в моем scanf, который не читает всю строку, введенную пользователем.Кажется, что мой strtok работал нормально, но значение, которое я использую, чтобы соответствовать возвращаемому значению strtok, неверно.Например, моя функция strtok берет «Джереми Уитфилд, Ронни Уифилд» и дает мне «Джереми Уитфилд» и «Ронни Уитфилд».В моей программе я использую scanf для ввода пользовательского ввода> "Ronny Whitfield", который на самом деле читает только "Ronny".Так что проблема с моим scanf не strtok.Моя виртуальная машина зависает каждый раз, когда я открываю ее, поэтому я пока не могу получить доступ к своему коду.

...