Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

strlen() против sizeof() в C: понимание отличий и правильное использование

Что такое strlen()

В C strlen() возвращает количество символов в null-терминированной строке, не считая завершающий '\0'. Считает буквы, цифры, символы и пробелы.

Статья объясняет роль strlen(), sizeof() и причины их различий.

Что такое sizeof()

Оператор sizeof выдаёт размер операнда в байтах. Для статических типов вычисляется на этапе компиляции, для массивов переменной длины — во время выполнения. Применяется ко всем типам C: примитивам, указателям, структурам, объединениям. Результат типа size_t — беззнаковое целое, достаточное для размера наибольшего объекта.

Так как размеры типов вроде int или double могут отличаться на 32- и 64-битных системах, sizeof обеспечивает переносимость.

Ключевые отличия

Синтаксис strlen()

size_t length = strlen(my_string);

my_string — символьный массив или указатель на null-терминированную строку.

Пример strlen()

#include <stdio.h>
#include <string.h>
int main() {
    char strng[] = "January";
    printf("Length of given string is: %zu\n", strlen(strng));
    return 0;
}

Вывод:

Length of given string is: 7

Синтаксис sizeof()

1) sizeof(тип)

sizeof(type) выдаёт размер указанного типа.

#include <stdio.h>
#define my_sizeof(type) ((char*)(&type+1) - (char*)&type)
int main() {
    double x;
    printf("%zu", my_sizeof(x));
    return 0;
}

Вывод: 8

2) sizeof(переменная)

Передайте имя переменной, чтобы получить её память.

#include <stdio.h>
int main() {
    printf("sizeof(char) = %zu\n", sizeof(char));
    return 0;
}

Вывод: sizeof(char) = 1

3) sizeof(выражение)

Оценивает размер типа выражения без вычисления его значения.

#include <stdio.h>
int main() {
    char p = 'S';
    double q = 4.65;
    printf("Size of variable p : %zu\n", sizeof(p));
    printf("Size of an expression : %zu\n", sizeof(p+q));
    int a = (int)(p+q);
    printf("Size of explicitly converted expression : %zu\n", sizeof(a));
    return 0;
}

Вывод:

Size of variable p : 1
Size of an expression : 8
Size of explicitly converted expression : 4

Наглядное сравнение

strlen() против sizeof() в C: понимание отличий и правильное использование

Характеристикаstrlen()sizeof()
Заголовочный файлstring.hНе требуется (встроенный оператор)
НазначениеДлина строки (без null)Размер типа или переменной в памяти
Тип возвращаемого значенияsize_tsize_t
Время вычисленияRuntime (может проходить по строке)Compile-time (кроме VLA)
Применимо кТолько символьные массивы или указатели на null-терминированные строкиВсе типы данных и выражения

Когда что использовать

Следование этим правилам гарантирует эффективный, переносимый и поддерживаемый C-код.

Язык C

  1. Асбест против стекловолокна: ключевые различия, применение и безопасность
  2. Структуры против объединений в C: практическое руководство
  3. C# против C++: четкое сравнение особенностей, производительности и сценариев использования
  4. C против C++: ключевые отличия и когда что выбирать
  5. C против Java: подробное сравнение особенностей, истории и применения
  6. Python против JavaScript: ключевые отличия, особенности и выбор языка
  7. Python против Ruby: подробное сравнение особенностей, преимуществ и сценариев использования
  8. Двигатели постоянного и переменного тока: ключевые отличия и руководство по выбору
  9. Пайка (бразинг) vs Паяльник (солдеринг): ключевые отличия
  10. Двухтактные vs четырехтактные двигатели: ключевые отличия