Вывести другое значение после вызова функции? - PullRequest
0 голосов
/ 04 мая 2019

Я путаюсь с другим sizeof () возвращаемым значением после вызова функции check () buf точно так же, как буфер на основе printf () для каждого символа.Любой ответ потрясающий!Thx.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void check(char *buf)
{

    printf("%d \n", sizeof(buf)); // **output 8**

}
int main(int argc, char *argv[])
{

    char buffer[] = "\x64\x49\x00\x55\x33\x33\x33\x64\x49\x00\x00\x00\x55\x33\x33\x33\x64\x49\x00\x00\x00\x55\x33\x33\x64\x49\x00\x00\x00\x55\x33\x33";
    printf("%d\n", sizeof(buffer)); // **output 33**
    check(buffer);

}

1 Ответ

1 голос
/ 04 мая 2019

В функции check буфер является указателем на char, а его размер составляет 8

В буферах main предоставлен массив из 33 элементов, а его размер равен 33

.

Чтобы получить длину строки C, используйте функцию strlen.

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

В вашем примере:

void check(char *buf, size_t size)
{

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

}
int main(int argc, char *argv[])
{

    char buffer[] = "\x64\x49\x00\x55\x33\x33\x33\x64\x49\x00\x00\x00\x55\x33\x33\x33\x64\x49\x00\x00\x00\x55\x33\x33\x64\x49\x00\x00\x00\x55\x33\x33";
    printf("%d\n", sizeof(buffer)); // **output 33**
    check(buffer, sizeof(buffer));

}
...