2016-07-09 10 views
-5

Об этом коде я хочу знать размер не длина:Каков размер, который можно получить от sizeof (str)?

char* str= "the big fox hid the carrot." 
int *i=(int*) (sizeof(str)); 

Что я получаю в i?

+2

И 'sizeof (char *)', и как преобразовать ненулевые целые числа в указатели определены реализацией. Запустите код, чтобы получить ответ. – MikeCAT

+1

'int * i = (int *) (sizeof (str));' ?? Что вы до этого? –

+0

Код действительно выдает ошибку компиляции, поскольку точка с запятой отсутствует после строкового литерала. – MikeCAT

ответ

2

Что я буду получать в i?

Ничего не гарантировано, это реализация, предназначенная для преобразования целочисленного типа в указатель.

Чтобы разработать в своем коде,

char* str= "the big fox hid the carrot." 

strchar * является. sizeof(str) - это то же самое, что и sizeof(char*), которое составляет sizeof(<a pointer>), которое обычно составляет 4 или 8, в зависимости от вашей платформы.

Помните, sizeof вычисляется в результате типа size_t, так что вы должны

  • не использовать результат для инициализации указателя.
  • использовать переменную типа size_t для удержания результата
  • %zu спецификатор формата для печати результата.

working version того, что вы хотите достичь может выглядеть

#include <stdio.h> 

int main(void) { 
    char * ptr = "Hello!!"; 
    size_t size = sizeof(ptr); 

    printf("size if %zu\n", size); 

    return 0; 
} 

удержанного из оригинальной версии ответа на вопрос

Тем не менее, только добавьте немного больше контекста, применяя sizeof на str, не даст вам размер это строковый литерал, на который указывает. Вы можете использовать strlen(), чтобы получить длину строки, на которую указывает.

+1

Я просто хочу знать размер не длины ... Ответ должен быть как 4, но я не понимаю его –

+0

@MikeCAT вы имеете в виду 4 байта? –

+0

@TalShani Почему вы забрасываете число, возвращаемое 'sizeof' указателю? – melpomene

1

Размер указателя str могут быть получены либо как

size_t n = sizeof(char *); 

или

size_t n = sizeof(str); 

или

size_t n = sizeof str; 

В зависимости от используемой среды результат может быть равно 4 или 8.

Если вы хотите знать длину строки литерал на который указывает ул, то вам необходимо применить стандартную функцию C strlen заявленную в заголовке <string.h>

#include <string.h> 

//... 

size_t n = strlen(str); 

Длина строки буквального будет равен 27

Учтите, что оператор sizeof и стандартная функция C strlen возвращают скалярное интегральное значение типа size_t.

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

#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
    char *str = "the big fox hid the carrot."; 

    printf("sizeof(*str) = %zu\nsizeof(str) = %zu\nstrlen(str) = %zu\n", 
      sizeof(*str), sizeof(str), strlen(str)); 
} 

Его выход может выглядеть

sizeof(*str) = 1 
sizeof(str) = 4 
strlen(str) = 27 
+0

спасибо, я просто хочу знать о sizeof (str) = 4. как вы добрались до 4? что означает 4? –

+0

@TalShani. Вы получаете 4, запустив программу и глядя на выход.Значение 4 означает, что размер 'char *' равен 4 байтам. – melpomene

+0

@melpomene спасибо. если вместо char * это был только символ sizeof (str), будет еще 4? –

0

Чтобы получить размер str, используйте sizeof str.

+0

Короткий ответ. Любой путь прямо к Точке. – Michi