Track1 *extractTrack1(char *data) { Track1 *retval; retval = malloc(sizeof(Track1)); char *t1, *t2, *t3; fprintf(stderr, "Sep1 "); t1 = strtok(data, "^"); fprintf(stderr, "Sep2 "); t2 = strtok(NULL, "^"); fprintf(stderr, "Sep 3\n"); t3 = strtok(NULL, "^"); t1++; // Skipping starting trash byte strncpy(retval->CardHolder, t2, strlen(t2)); strncpy(retval->PAN, t1, 16); retval->PAN[16] = '\0'; // closer zero char strncpy(retval->ExpDat, t3, 5); retval->ExpDat[5] = '\0'; t3 += 5; strncpy(retval->ServCode, t3, 4); retval->ServCode[4] = '\0'; t3 += 4; strncpy(retval->PINVerif, t3, 6); retval->PINVerif[6] = '\0'; t3 += 6; strncpy(retval->DiscData, t3, 11); retval->DiscData[11] = '\0'; t3 +=11; strncpy(retval->Visa, t3, 12); retval->Visa[12] = '\0'; return retval; }