Вы можете просто использовать:
char buffer[4096];
size_t nbytes = fread(buffer, sizeof(char), sizeof(buffer), fp);
if (nbytes == 0)
...EOF or other error...
else
...process nbytes of data...
Или, другими словами, предоставьте себе пространство данных, достаточно большое для любых допустимых данных, а затем запишите, сколько данных фактически было считано в строку. Обратите внимание, что строка не будет заканчиваться нулем, если только buffer
не содержит все нули до fread()
или файл не содержит нулевой байт. Вы не можете полагаться на обнуление локальной переменной перед использованием.
Непонятно, как вы хотите создать «переменную соответствующего размера». Вы можете использовать динамическое выделение памяти (malloc()
), чтобы обеспечить правильный объем пространства, и затем вернуть этот выделенный указатель из функции. Не забудьте проверить наличие нулевого возврата (не хватает памяти) перед его использованием.