#include "stdio.h"
#include "string.h"
main()
{
char string[] = "october"; // october is 7 letters
strcpy(string, "september"); // september is 9 letters
printf("the size of %s is %d and the length is %d\n\n", string, sizeof(string), strlen(string));
return 0;
}
Output:sizeof vs strlen
kích thước của tháng chín là 8 và chiều dài là 9
Có điều gì sai với cú pháp của tôi hoặc những gì?
Bạn đang viết quá ký tự kết thúc mảng 'chuỗi'. Đây là hành vi không xác định. 'chuỗi' chỉ có thể chứa 8 ký tự (7 cho" tháng mười "và 1 ký tự cho dấu kết thúc null). Khi bạn gọi 'strcpy', bạn đang viết 10 ký tự cho nó (9 cho" tháng chín "và 1 cho null terminator), có nghĩa là bạn đã đi qua cuối mảng và đang ghi đè lên bộ nhớ liền kề. – Marlon
Lưu ý rằng 'sizeof' được tính tại thời gian * biên dịch * khi' strlen' là thời gian chạy. – Naveen
@Naveen: Lưu ý rằng điều đó không nhất thiết đúng khi VLA có liên quan. – caf