Обрезка неиспользуемых элементов из буфера [] перед fwrite - PullRequest
1 голос
/ 19 января 2012

Я создаю файл с содержимым, зависящим от некоторых локальных переменных. Я не знаю, как долго файл будет в конце. Поскольку я определяю массив buffer[] с фиксированным размером, последние символы в сгенерированном файле являются мусором. Как мне обрезать массив buffer[] перед записью в файл? Или fwrite только используемые байты?

Вот мой код:

FILE * pFile = NULL;
char buffer[300];
int ret_val = -1;
strcpy_s(buffer, "The path is \"");
strcat_s(buffer, pathVariable);
strcat_s(buffer, "\"\n");
pFile = fopen(myfile, "w");
if(NULL == pFile)
{
  perror("File opening error");
  return -1;
}
ret_val = fwrite(buffer, 1, sizeof(buffer), pFile );
if(sizeof(buffer) != ret_val)
{
  perror("File writing error");
  return -1;
}
fclose(pFile);

Ответы [ 2 ]

1 голос
/ 19 января 2012

fwrite() не знает, какие байты вы считаете "использованными".Когда вы называете это так:

fwrite(buffer, 1, sizeof(buffer), pFile );

будет записано sizeof(buffer) байт.

Измените вызов на:

ret_val = fwrite(buffer, 1, used_bytes, pFile );

, где used_bytes - это некотороепеременная, которую вы установили перед вызовом.

Вам также нужно будет изменить последующую проверку ошибок:

if(ret_val != used_bytes)

edit В этом случае, вы бы увиделихочу установить used_bytes на strlen(buffer).

1 голос
/ 19 января 2012

Третий аргумент, переданный fwrite() - это количество байтов для записи, поэтому вместо записи используйте:

fwrite(buffer, 1, sizeof(buffer), pFile )

посчитайте количество байтов, которые вы действительно хотите записать, затем выполните:

fwrite(buffer, 1, numBytesToWrite, pFile )
...