【问题标题】:Output different value after function call?函数调用后输出不同的值?
【发布时间】:2019-09-22 20:25:04
【问题描述】:

我对函数 check() 调用后的不同 sizeof() 返回值感到困惑。并且 bufbuffer 完全相同,基于每个字符的 printf()。任何回复都很棒!谢谢。

#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);

}

【问题讨论】:

  • 指针大小与数组大小?

标签: c arrays pointers char


【解决方案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));

}

【讨论】:

  • thx!233 那么我可以在函数检查中获取 char 数组的大小吗?
猜你喜欢
  • 1970-01-01
  • 2019-06-14
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 2021-07-09
相关资源
最近更新 更多