Я столкнулся с этой довольно глупой проблемой, используя strtok() в C. Процедура в main
, похоже, не касается моего измененного токена, в то время как те же работы в sub_routine
, где единственное, что я сделал по-другому, - это сохранить знак токена в static
.strtok() не относится к новому значению токена при последующих вызовах
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void sub_routine()
{
char str[80] = "This is { some important } website";
char *val = NULL;
val = (char *)malloc(sizeof(char)*255);
strncpy(val, str, sizeof(str));
static char s = '{';
char *token;
/* get the first token */
token = strtok(val, &s);
/* walk through other tokens */
while(token != NULL)
{
printf(" %s\n", token);
s= '}';
token = strtok(NULL, &s);
}
}
int main()
{
char symbol='{';
char *string = NULL;
char *match = NULL;
char ref[255]="Do something here {Do it now}. What now?";
string = (char *)malloc(sizeof(char) * 255);
strncpy(string, ref, sizeof(ref));
match = strtok(string, &symbol);
printf("\n%s", match);
printf("\n%s", string);
if(string!= NULL)
{
symbol = '}';
match= strtok(NULL, &symbol);
printf("\n%s\n", match);
}
sub_routine();
}
Не мог бы кто-нибудь пролить свет на него?
Почему вы используете 'strtok'? Это одна из худших функций в стандартной библиотеке c. – CodesInChaos
Сепараторы должны быть заданы как строка с нулевым завершением. Вы передаете указатель на один символ, который, скорее всего, не заканчивается на нуль. Сделайте '' 'массив:' char s [2] = "{"; '. («Статическая» переменная может быть дополнена нулевыми байтами, что может объяснить ваше поведение.) –
@CodesInChaos Какие альтернативы вы предлагаете (за исключением его реентерабельной версии)? – Anshul