В контексте вашего поста, кажется, что вы действительно хотите, чтобы определить длины строки, содержащейся на переменную, в отличие от размера переменной. sizeof
, когда применяется к указателю, укажет размер адреса, а не длину строки. Если вам нужно определить длину строки во время выполнения, используйте функцию strlen
:
`int len = strlen(some_str)`
Вы можете получать full_msg_size: 25 размер full_msg: 8 потому что SizeOf
является возвращая размер адреса full_msg
.
Таким образом, ваша функция:
printf("size of full_msg: %d\n", (int*)sizeof(full_msg));
Должно быть:
printf("length of full_msg: %d\n", strlen(full_msg));
если вы хотите хотите calloc 25 байт памяти точно:
char *full_msg = {0};
full_msg = calloc(25, 1); //all space initialized to 0
//or you can also use:
full_msg = malloc(25);
full_msg прямо сейчас имеет память для ровно 25 байтов (но нужно использовать для '\ 0')
Оператор sizeof
при использовании на char *str
, возвращает вам размер char *
, который является всего лишь адресом.
Примечание: Размер адреса (или указатель) не всегда будет 8 байт только потому, что вы работаете в 64-битной машине а, это зависит от того, что приложение компилируется: 32bit или 64bit , то есть для 32-битного приложения размер адреса составляет 4 байта, для 64-битного приложения - 8 байтов.
'sizeof (char)' всегда '1', поэтому вы можете просто написать 1. – glglgl