Chúng ta đều biết những rắc rối tràn có thể gây ra, và đây là lý do tại sao strn * tồn tại - và hầu hết thời gian họ có ý nghĩa. Tuy nhiên, tôi đã nhìn thấy mã trong đó sử dụng strncmp để so sánh các thông số dòng lệnh như sau:Tôi có đúng là strcmp tương đương (và an toàn) cho các văn chương không?
Bây giờ, tôi đã có thể nghĩ rằng đây là không cần thiết và thậm chí nguy hiểm (đối với các thông số còn nó sẽ được dễ dàng để tính sai các nhân vật trong chữ).
strncmp dừng trên giá trị rỗng và mã đã giả định argv [i] bị hủy. Bất kỳ chuỗi ký tự nào được đảm bảo là không bị chấm dứt, vậy tại sao không sử dụng strcmp?
Có lẽ tôi đang thiếu một cái gì đó, nhưng tôi đã nhìn thấy điều này một vài lần và lần này nó hấp dẫn tôi đủ để yêu cầu.
nhưng điều đó lặp chuỗi hai lần không cần thiết. Ít nhất sử dụng (sizeof ("- help") - 1). Và có, sizeof hoạt động chính xác trên chuỗi ký tự từ kích thước của chúng được biết tại thời gian biên dịch. –
Ngoài ra, không, strlen không tính giá trị rỗng. –
Tôi không chắc chắn về sizeof so với chuỗi ký tự. Nói chung, tôi muốn đề nghị C + + và std :: string. :-) –