Ваш код не будет работать, потому что strtok
не работает так, как вы думаете. При вызове в первый раз, как это:
char *p = strtok(data,"(");
Он будет:
- пропустить до первого символа, это не разделителем.
- затем попытайтесь найти следующий разделитель.
- заменить последним разделителем с
\0
.
- вернуть указатель на первый символ токена.
Поскольку второй шаг не выполняется (разделителей больше нет), strtok просто вернет NULL
, указав, что он не нашел никаких токенов. Любые дальнейшие вызовы strtok
для того же ввода также возвращают NULL
.
Вы можете изменить это, добавив окончание разделитель в первом вызове, как это:
char *p = strtok(data,"()");
Теперь strtok
найти маркер и возвращает указатель на первый x
в вашем примере. Заметьте, однако, что, поскольку он только заменил ограничивающий ограничитель на \0
, начальный родитель все еще присутствует в data
.
Чтобы избавиться от этого, который вы могли бы сделать что-то вроде этого:
char *p = strtok(data,"()");
strcpy(data, p);
Однако я предпочел бы рекомендовать строить новую строку результатов, если у вас есть какие-либо другие материалы в исходных данных, а также.
Как насчет '' a (xxx) b "'? – a3f
Не совсем понятно, что вы просите –
@layzak возьмите любое слово с() и просто удалите() из исходного слова. – Curnelious