Lấy câu hỏi cuối cùng của bạn đầu tiên, đảm bảo kích thước tối đa là khá dễ dàng. Thông thường bạn muốn sử dụng fgets
để đọc chuỗi. Điều này cho phép bạn chỉ định độ dài tối đa. Ngoài ra, bạn có thể chỉ định kích thước tối đa theo định dạng quét (ví dụ: "%29s"
hoặc "%29[^\n]"
). Lưu ý sự khác biệt giữa hai: với fgets
bạn chỉ định kích thước bộ đệm, nhưng với scanf
bạn chỉ định một kích thước nhỏ hơn kích thước bộ đệm (nghĩa là số ký tự tối đa cần đọc).
Đối với câu hỏi đầu tiên: có, thường có những cách tốt hơn. strncpy
là một chức năng lạ, ban đầu được viết cho một mục đích khá cụ thể, và (phải trung thực) có lẽ nên được gỡ bỏ khỏi thư viện chuẩn, bởi vì trong khi nó dường như như nó sẽ hữu ích, nó gần như không bao giờ thực sự là.
Tôi có thể sẽ làm những việc khác một chút. Một khả năng sẽ được sử dụng snprintf
, một cái gì đó như:
snprintf(
out_file_name,
sizeof(out_file_name),
"%*s",
strlen(FileName) - strlen(IN_FILE_SUFFIX), FileName);
Nguồn
2010-08-31 23:40:51
Bạn có nghĩa là thêm vào trước? Hoặc khai thác chuỗi? Cắt ngắn? –
Tôi nghĩ rằng bạn có nghĩa là "cắt ngắn" (bạn muốn loại bỏ các yếu tố từ cuối chuỗi, cắt ngắn nó thành một chiều dài ngắn hơn, phải không?) –
cắt ngắn - đó là một. Cảm ơn. Xin lỗi, tiếng Anh là ngôn ngữ đầu tiên của tôi .... có trước tiên, đó là lý do tại sao nó quá tệ. –