Стрлен чар * Маллок
У меня есть следующий код
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() читает после конца вашего блока памяти и в другие части кучи вашей программы, пока не найдет нулевой байт.