Я работаю над мини-проектом, который хранит свою базу данных в локальном файле и управляет им. Я все еще новичок в программировании, так что эта случайность вывода не в моих знаниях для отладки. Код на данный момент большой, поэтому я просто вставлю то, что имеет отношение.
extern void returnRecord(FILE *fp, fpos_t pos, char *retArr)
{
char tok = delim; //for strtok (delimiter = control char 21)
char tmpArr[612]; //for strtok
char *segment; //pointer to save strtok return
fsetpos(fp, &pos); //beginning of the record
fgets(tmpArr, 611, fp);
strtok(tmpArr,&tok);
strcpy(retArr, tmpArr);
strcat(retArr, "\n");
segment = strtok(NULL, &tok); //tmpArr now has the author name
int tmpCount = 0;
char c = segment[0];
int counter = strlen(retArr);
while((c != 6) && (c != 0))
{
retArr[counter++] = c;
c = segment[++tmpCount];
}
retArr[counter++] = '\n';
segment = strtok(NULL, &tok); //tmpArr now has the rack number
tmpCount = 0;
c = segment[tmpCount++];
while((c != 6) && (c != 0))
{
retArr[counter++] = c;
c = segment[tmpCount++];
}
retArr[counter++] = '\n';
segment = strtok(NULL, &tok); //tmpArr now has the book title
tmpCount = 0;
c = segment[tmpCount++];
while((c != 6) && (c != 0) && (c != '\n'))
{
retArr[counter++] = c;
c = segment[tmpCount++];
}
retArr[counter] = '\0';
return;
}
Ниже приведен не C, а описание образца записи в моей базе данных:
<...> everything inside is my explanation
<6s> means a bunch of buffer characters that are all 0x06
3<delim>Isaac Newton<6s><delim>3<6s><delim>Philosophiæ Naturalis Principia Mathematica<6s><new line only if it's not the final record>
(delim is: #define delim 21 //at the top)
Вероятно, есть некоторые избыточности, но оптимизация не является моей непосредственной задачей, потому что выходные данные (char * retArr) не всегда согласованы. Вот некоторые из моих выводов при спаме исполняемого файла.
printf("%s\n strlen: %d\n", ret2, strlen(ret2)); //print code
(the first execution here shows the full correct output)
sflash@debian:~/Documents/AOHI/experimental/books$ ./exe
6
Stress test | boooiafnakekjfn/;
4124
e0q-pjrnoibq3uitu0o;@lt@qjtoilqnkubneugbq3tq3
strlen: 84
sflash@debian:~/Documents/AOHI/experimental/books$ ./exe
6
Stress test | boooiafnakekjfn/;
41245
e0q-pjrn
strlen: 48
sflash@debian:~/Documents/AOHI/experimental/books$ ./exe
6
Stress test | boooiafnakekjfn/;
41
45
strlen: 39
Код, кажется, перепрыгивает через несколько итераций, когда я быстро запускаю программу. Это очень важно исправить, потому что я собираюсь вызывать эту функцию / объект внутри циклов.