c - 函数调用后输出不同的值?
问题描述
我对函数check()调用后不同的sizeof()返回值感到困惑。并且buf与基于每个字符的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);
}
解决方案
在函数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));
}
推荐阅读
- r - R - 如何在向量中的特定元素周围创建升序/降序数字线
- android - CardView 在添加新项目时更改大小
- flutter - Flutter如何停止在后台状态下播放视频?
- javascript - three.js raycaster 可以与 fbx2gltf 导出的 Group 模型交互吗?
- json - 如何从服务器解码此响应?我被困住了,响应的“数据”在地图中
- c++ - 如何在不重复的情况下在进程之间共享大量数据?(IPC)
- php - 如何在codeigniter的单行中显示相同的id数据?
- android - 如何跟踪我的应用程序的 ActivityManager 加载时间?
- java - 使用 Retrofit 和 PHP 作为后端,无法从 android 中的服务器接收任何响应
- spring-boot - 带有 CompletableFuture 的 Spring Boot 异步调用,异常处理