вы не можете использовать два цикла strtok, потому что strtok хранит глобально указатель в вашей строке.
Вам потребуется выполнить цикл для разделения ;
, сохранить эти результаты и один цикл, чтобы отделить =
от ранее сохраненного результата.
char* del1 = ";";
char* del2 = "=";
char input[BUFLEN];
char* tokens[255]; // have to be careful not to go more then that
while(fgets(input, BUFLEN, fp)) {
// input[strlen(input)-1]='\0'; // you don't need that fgets add the NULL
char* record = strtok(input, del1);
i = 0;
while(record) {
tokens[i++] = strdup(record);
record = strtok(NULL, del1);
}
for(v = 0; v < i; v++){
char* field = strtok(token[v], del2);
while(field) {
printf("Record: %s\n",token[v]);
printf("Field: %s\n",field);
field = strtok(NULL, del2);
}
}
}
обратите внимание, что вам нужно free
все строки strdup после, иначе вы создадите утечку памяти.
также, пожалуйста, не подпись strtok
является
char * strtok ( char * str, const char * delimiters );
так что вам не нужен &del
, так как del уже является char *
.