int main()
{
char* tab=new char[14] ;
cout << " lenght with sizeof: "<<sizeof(tab)<<endl;
cout << " length with strlen: "<<strlen(tab)<<endl;
system(" pause");
return 0;
}
Я получил выход:STRLEN возвращает неопределенное поведение с C++
длина с SizeOf: 4
Длина с StrLen: 30
я ожидаю результат sizeof
но не то, что возвращается strlen
!
Для тех, кто поспешит опубликовать, что это дублированный вопрос. Я хочу сказать, что это совсем не такая возможность. Потому что я знаю о времени компиляции и времени выполнения и многом другом относительно strlen
и sizeof
, однако я не могу найти объяснения этого результата.
Благодарим за помощь.
'sizeof (tab)' дает размер указателя 'char *', а не размер выделенных пространств, или размер нулевой завершенной c-строки, хранящейся там. –
Ваш массив 'char' не инициализирован, поэтому результат' strlen' не определен, так как он будет считать все символы до тех пор, пока не найдет нулевой символ. – Geoffroy
@ πάντα ῥεῖ Спасибо друг другу. Я согласен с тобой, но ты не понимаешь моего вопроса, я спрашиваю о возвращенном результатом, который вам 30 лет! – xtensa1408