Первым делом отвечая на ваш последний вопрос, обеспечить максимальный размер довольно легко. Обычно вы хотите использовать fgets
для чтения строки. Это позволяет указать максимальную длину. В качестве альтернативы вы можете указать максимальный размер в формате scanf (например, "%29s"
или "%29[^\n]"
). Обратите внимание на разницу между ними: с помощью fgets
вы указываете размер буфера, но с помощью scanf
вы указываете на единицу меньше размера буфера (т. Е. Максимальное количество символов для чтения).
Что касается первого вопроса: да, как правило, есть лучшие способы. strncpy
- странная функция, изначально написанная для довольно конкретной цели, и (если честно), вероятно, должна быть удалена из стандартной библиотеки, потому что, хотя кажется такой, как она должна быть полезной, она почти никогда на самом деле.
Я бы, наверное, поступил немного иначе. Одна возможность - использовать snprintf
, что-то вроде:
snprintf(
out_file_name,
sizeof(out_file_name),
"%*s",
strlen(FileName) - strlen(IN_FILE_SUFFIX), FileName);