Hàm malloc tạo nhiều vùng nhớ hơn cần thiết

Chào mọi ng, nay mình có học về pointer, string nên có tập tành code. Nội dung như sau:

char* buffer;
buffer = (char*)malloc(34*(sizeof(char)));
...
for ( uint8_t i = 0; buffer[i] != 0x00; i++) { // Kiểm tra hiện tại là NULL hay ko
UART_Send(buffer[i]);
}
OK LAT:4003.89247 N LON:10512.56414 WÄÕìýaaô€‘„•–陃ˆƒ‚“›ƒŠƒààðà–‘œ‘—
char* buffer;
buffer = (char*)malloc(34*(sizeof(char)));
...
size_t len = strlen (buffer);
for (uint8_t i = 0; i < len; i++) {
UART_Send(buffer[i]):
}
OK LAT:4003.88996 N LON:10512.57545 W “ߑϑ•ø”ÿÏ

Kết quả trả về của cả 2 trường hợp đều dài hơn 34 ký tự.
Mong mọi ng vào giúp đỡ

Nguyên nhân ko phải như vậy :slight_smile: mà mấy chuỗi xuất là đang hiện ngay trên thiết bị phải ko?

2 Likes

Chào bác, e cũng ko rõ nữa. Nôm na là e viết 1 hàm chuyền chuỗi này qua giao tiếp UART để xuất lên màn hình. Khi viết xong thì nó chuyền ra như vậy. E ko hiểu tại sao nên mang lên trên này hỏi mọi ng!

chắc là thiếu \0? C string phải kết thúc bằng ký tự null, ví dụ Hello tuy có 5 ký tự nhưng thực ra phải là 6 ký tự h, e, l, l, o, \0

trong đoạn ba chấm ... có kết thúc chuỗi bằng ký tự null đó ko :V

char* buffer;
buffer = (char*)malloc(34*(sizeof(char)));
...
buffer[33] = '\0'; //phang luôn cho chắc
size_t len = strlen (buffer);
...

5 Likes

Hi bác, cũng có thể lắm vì e ghi cả 34 ký tự lên buffer. Có lẽ e bị sai đoạn này!

Thank bác nhiều nhé. Đúng là do e sử dụng hết 34 ký tự trong khi chỉ đc dùng 33, phải chừa lại thằng cuối cùng cho NULL. Bây h chuỗi trả về đẹp rùi!

lỗi nhiều người phạm phải mà :V

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?