Стрлен чар * Маллок

У меня есть следующий код

char *new_str;
int size_in_bytes;
int length;

size_in_bytes = 2*sizeof(char);
new_str = (char *)malloc(size_in_bytes);
length = strlen(new_str);

Ожидается, что длина будет 2, на самом деле это 16. Может кто-нибудь объяснить, почему?

1 ответ

strlen() возвращает индекс первого нулевого байта ('\0'), начиная с адреса, который вы передали. Строки в C, как правило, всегда заканчиваются этим символом, чтобы отметить конец строки.

strlen() не возвращает длину фактического блока памяти.

В вашем примере память неинициализирована, и strlen() читает после конца вашего блока памяти и в другие части кучи вашей программы, пока не найдет нулевой байт.

Другие вопросы по тегам