Я установил буфер в размер 100. Я отображаю буфер в основной функции, где объявлен буфер. Однако, когда я передаю буфер функции и получаю sizeof '4', Я думал, что это должно быть 100, так как это размер буфера, который я создал . выход: Размер буфера: 100 SizeOf (буфер): 4Передача буфера символов в функции и получение размера буфера
#include <string.h>
#include <stdio.h>
void load_buffer(char *buffer);
int main()
{
char buffer[100];
printf("buffer size: %d\n", sizeof(buffer));
load_buffer(buffer);
return 0;
}
void load_buffer(char *buffer)
{
printf("sizeof(buffer): %d\n", sizeof(buffer));
}
В main() вы явно объявили массив, в то время как в load_buffer() вы указали указатель. Разница заключается в том, что в main() компилятор знает, что буфер является массивом, но в load_buffer() компилятор не знает, находится ли буфер из массива или распределенный мир памяти в куче, или структура или что-то еще , Компилятор знает только адрес памяти (таким образом, указатель), поэтому sizeof() возвращает размер адреса памяти, длина которого составляет 4 байта (поскольку это 32-битная машина, если она была 64-битной машиной, это было бы 8 байтов). Надеюсь, это поможет понять немного больше. – AndaluZ
Вместо функции sizeof() используйте strlen(), затем он возвращает размер значения указателя. – NandhaKumar