C lang sizeof(char[]) получить статический размер

#c #arrays #char #sizeof

#c #массивы #char #sizeof

Вопрос:

Я хочу получить размер массива символов, но я не могу этого сделать

давайте посмотрим

 #define MAX 64

char value[MAX]

value = "hi"    //or something initialization
sizeof("hi")    //result = 3
sizeof(value)   // result = 64
  

Я хочу получить sizeof("hi") == sizeof(value)
Как я не могу сделать?

Комментарии:

1. Это вообще компилируется? Я не знал, что вы можете назначить массив, как вы сделали в строке 5.

2. О, но у вас больше синтаксических ошибок, так что это всего лишь пример. Неважно.

3. strlen(value) == 2

4. Опубликовать реальный код (который, по крайней мере, компилируется)

5. Вы можете создать sizeof("hi") == sizeof(value) , если вы создаете "hi" и value имеете одинаковый размер.

Ответ №1:

В фрагменте, который вы включили, вы фактически устанавливаете размер value равным 64. В результате sizeof(value) будет возвращено 64 * sizeof(char) . Это правильно, независимо от того, что вы помещаете в массив value .

Возможно, то, что вы пытаетесь сделать, это автоматически изменить размер массива во время компиляции? например

 char value[] = "hi";
int value_size = sizeof(value); // value_size will now equal 3, as the array contains { 'h', 'i', '' }
  

Ответ №2:

sizeof(value) , с char value[MAX] возвращает размер char , умноженный на MAX . Следовательно, длина строки, хранящейся в value , никогда не будет размером value .