Определяне дължината на линията с и - стек преливане на Руски

Основната разлика е, че strlen функция изчислява дължината на низа, и оператора на sizeof за изчисляване на дължината на линията няма нищо общо. sizeof оператор се използва за определяне на размера на паметта, заета от предприятието. Когато се работи с редове тя може да се прилага само за реда, определени в стека и постоянни линии. работи механизмът може да се види в следния пример:







Отговорено 24 '10 ноември в 12:52

sizeof - оператор, е език, използван за определяне на вида на размера на данните в байтове. Стойността на експресия с използване sizeof определя по време на съставянето на код, с изключение на някои случаи, например, за масиви с различна дължина, както е определено в C99.

strlen - е стандартна функция библиотека С, използван за определяне на дължината на линия прекратяване нула. Стойността на експресия с използване strlen повикване се определя по време на изпълнение.







Отговорено 25 ноември '10 в 11:28

Позволете ми да се отбележи, че sizeof връща размера в байтове. Т.е. обикновено максималната дължина на низа, които се вписват в char'ov масив.

strlen - е функция на стандартната библиотека, за да се определи дължината на 0-прекратено низ. Връща броя на знаците, без да се прекратява 0. Това означава, че действителното количество памет заета от един ред най-малко равна на резултата от извършване strlen + 1 байта.

Актуални проблеми обикновено възникват при използване на Unicode, т.е. с видовете или WCHAR TCHAR и съответните F-ции. Тъй като Unicode символи не заемат 1 байт и 2. И така, за да се смесят броя на знаците, както и размерът на паметта им, оказва се, не си струва. И имайки предвид, че много програми рано или късно ще трябва да се възстанови - по-добре е да се възможност да го направят. Т.е. общо - не забравяйте, че Fct низове обикновено изисква резолюция линия в символи и Fct операция памет (или максимален размер.) - обикновено в байтове.

За определяне на максималния брой елементи (т.е. знака на ред) под MSVC Използвах _countof макро. Мислех, че е доста удобно.