Các fgets()
chức năng chấp nhận đầu vào khi một ký tự xuống dòng (Enter khi sử dụng stdin
) đang gặp phải, và kí tự xuống dòng \n
được coi là một nhân vật có giá trị của các chức năng và nằm trong chuỗi sao chép vào str2
của bạn. Do đó, khi bạn chuyển nó thành tham số strlen()
, nó sẽ cho nhiều hơn một số ký tự ban đầu trong chuỗi của bạn để tính thêm ký tự \n
.
Nếu bạn muốn số ký tự gốc hoặc không muốn thêm \n
, hãy sử dụng hàm gets()
vì nó không sao chép ký tự dòng mới.Và hơn nữa, bạn chỉ cần chuyển chuỗi làm đối số, không cần phải truyền luồng (stdin
) làm luồng mặc định cho gets()
là stdin
.
char str2[100];
printf("\nEnter a string: ");
gets(str2);
printf("\n%d",strlen(str2));
Nguồn
2013-05-01 08:42:35
Có thể đếm '\ n' thay vì' \ 0' –
Vậy bạn đã nhập chuỗi gì và kết quả là gì? –
có thể trùng lặp của [fgets() thêm dòng mới vào cuối] (http://stackoverflow.com/questions/13443793/fgets-adds-newline-at-the-end) –