Принимая ваш последний вопрос первым, обеспечивая максимальный размер довольно легко. Как правило, вы хотите использовать 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);
Вы имеете в виду предварять? Или извлечение струны? Обрезать? – 2010-08-31 23:30:47
Я думаю, вы имеете в виду «truncate» (вы хотите удалить элементы из конца строки, усекая ее до более короткой длины, правильно?) –
truncate - это тот. Благодарю. К сожалению, английский - это мой первый язык ... да во-первых, вот почему это так плохо. –