函数调用后输出不同的值?

时间:2019-05-04 15:47:53

标签: c arrays pointers char

调用 check()后,不同的 sizeof()返回值令人困惑。根据每个字符的 printf() buf buffer 完全相同。任何回复都很棒!谢谢。

#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 个答案:

答案 0 :(得分:1)

函数check中的缓冲区是指向char的指针,其大小为8

main功能缓冲区中,包含33个元素的char数组,其大小为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));

}