Об этом коде я хочу знать размер не длина:Каков размер, который можно получить от sizeof (str)?
char* str= "the big fox hid the carrot."
int *i=(int*) (sizeof(str));
Что я получаю в i
?
Об этом коде я хочу знать размер не длина:Каков размер, который можно получить от sizeof (str)?
char* str= "the big fox hid the carrot."
int *i=(int*) (sizeof(str));
Что я получаю в i
?
Что я буду получать в
i
?
Ничего не гарантировано, это реализация, предназначенная для преобразования целочисленного типа в указатель.
Чтобы разработать в своем коде,
char* str= "the big fox hid the carrot."
str
char *
является. 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()
, чтобы получить длину строки, на которую указывает.
Я просто хочу знать размер не длины ... Ответ должен быть как 4, но я не понимаю его –
@MikeCAT вы имеете в виду 4 байта? –
@TalShani Почему вы забрасываете число, возвращаемое 'sizeof' указателю? – melpomene
Размер указателя 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
спасибо, я просто хочу знать о sizeof (str) = 4. как вы добрались до 4? что означает 4? –
@TalShani. Вы получаете 4, запустив программу и глядя на выход.Значение 4 означает, что размер 'char *' равен 4 байтам. – melpomene
@melpomene спасибо. если вместо char * это был только символ sizeof (str), будет еще 4? –
Чтобы получить размер str
, используйте sizeof str
.
Короткий ответ. Любой путь прямо к Точке. – Michi
И 'sizeof (char *)', и как преобразовать ненулевые целые числа в указатели определены реализацией. Запустите код, чтобы получить ответ. – MikeCAT
'int * i = (int *) (sizeof (str));' ?? Что вы до этого? –
Код действительно выдает ошибку компиляции, поскольку точка с запятой отсутствует после строкового литерала. – MikeCAT