Дополнительные странные символы читаются из файла определенных байтов - PullRequest
0 голосов
/ 01 февраля 2020

В моем буфере, созданном из "fread ()" csv-файла (во всей его полноте), печатаются непонятные дополнительные символы, если файл имеет длину в определенные байты. Я следую стандартному подходу для чтения файла (fseek (), ftell () и fread ()). Эта проблема возникает, когда размер моего файла лежит где-то между 104 и 113 байтами. 1. Почему это происходит в определенном диапазоне? 2.Solution?

Код:

int getfilesize(char *fname)
{
  FILE *fp = fopen(fname, "r");
  fseek(fp, 0, SEEK_END);
  int size = ftell(fp);
  fclose(fp);
  return size;
}

int main()
{

int file_size=getfilesize("sample1.csv");
printf("\nsize of file:%d",file_size);

char* buf=(malloc(file_size+1));

FILE* fp=fopen("sample1.csv","r");
fread(buf,file_size,1,fp);
fclose(fp);
printf("\nstring is: \n%s\n",buf);

    return 0;
}

Файл с ошибками («4» напечатано в следующей строке для этого файла): Sample1.csv (108 байт в моей системе): 0x1001,0,0,0-100 0x1017,5,1,10: -20: -30: 30: 40: -90: -23 0x1011,4,1,5: 10: 20 0x1028,2,0,0-2,1 0x1021,1,1,1: 2: 4: 8

Файл без ошибок: Sample1.csv (120 байт в моей системе): 0x1001,0,0,0-100 0x1017,5,1,10: -20: -30: 30: 40: -90: -23 0x1011,4,1,5: 10: 20 0x1028,2,0,0-2,1 0x1021,1,1,1: 2: 4: 8: 10: 12: 13: 14

1 Ответ

1 голос
/ 01 февраля 2020

Код не гарантирует печать строки , поскольку buf не является нулевым символом завершено.

Отрегулируйте код так, чтобы buf было строка или печать с ограничением ширины.

// printf("\nstring is: \n%s\n",buf);
printf("\nstring is: \n%.*s\n", file_size, buf);
...