Различные выходные данные при вычислениях длины и размера строки для инициализации строк на основе указателей и массивов
Понимание результатов
При создании строки str1 на основе указателя и строки str2 на основе массива с одинаковым значением функции strlen и sizeof дают разные результаты. В частности, для объявлений:
char *str1 = "Sanjeev";
char str2[] = "Sanjeev";
strlen возвращает 7 как для str1, так и для str2, поскольку он измеряет длину последовательности символов, исключая нулевой терминатор (\0) в конце.
Однако sizeof дает разные значения:
The Основное различие: тип данных и выделение памяти.
sizeof измеряет размер типа данных, а strlen измеряет длину последовательности символов. В случае str1 это указатель на символ, поэтому sizeof возвращает размер указателя. Для str2 это массив символов, поэтому sizeof возвращает размер всего массива, включая нулевой знак-терминатор.
Более подробно
Для демонстрации лучше различать, рассмотрите:
char str2[8];
strncpy(str2, "Sanjeev", 7);
char *str1 = str2;
Теперь и str1, и str2 указывают на один и тот же массив. Их значения strlen равны 7, но значения sizeof различаются:
Это пример того, как оценка размера зависит от базовой структуры данных.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3