调用 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);
}
答案 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));
}