c - 根据字符串输入返回 sizeof
问题描述
我正在寻找一种在 C 中具有函数的方法,该函数接受定义特定变量类型的字符串作为输入。然后该函数返回该sizeof
输入的结果,就好像字符串被评估为一种类型一样。考虑下面的例子。
#include <stdint.h>
typedef struct my_struct {
int16_t var1;
int16_t var2;
int16_t var3;
} mystruct_t;
int main(int argc, char * argv[])
{
return sizeof(argv[1]); // THIS IS WRONG!!
}
然后,用户可以编译它并尝试在我的机器上调用./myprogram my_struct_t
我期望它my_struct_t
在运行时返回实际 C 字节大小的地方。
我不确定的部分是,显然这会获取存储在中的(指向)字符串argv[1]
的大小,而不是字符串定义的类型的大小。我怎样才能进行这种转换?这甚至可能吗?
解决方案
您可以使用一系列 if 语句来做到这一点。为您希望允许调用者指定的每种类型添加一个:
#include <stdint.h>
#include <string.h>
typedef struct my_struct {
int16_t var1;
int16_t var2;
int16_t var3;
} my_struct_t;
int main(int argc, char * argv[])
{
const char * str;
if ( argc <= 1 )
return -1;
str = argv[1];
if ( 0 == strcmp( str, "int" ) )
return sizeof( int );
if ( 0 == strcmp( str, "int16_t" ) )
return sizeof( int16_t );
if ( 0 == strcmp( str, "struct my_struct" ) )
return sizeof( struct my_struct );
if ( 0 == strcmp( str, "my_struct_t" ) )
return sizeof( my_struct_t );
return -1;
}
推荐阅读
- vba - 由于升级到 Access 2013 OutputTo 命令(到 PDF)不起作用
- regex - 正则表达式不会用边界条件替换完全匹配
- reactjs - componentWillRecieveProps 与 getDerivedStateFromProps
- sql-server-2012 - 在多个数据库中搜索特定列名的表
- oracle - 我在哪里放置 JDBC 驱动程序文件?
- javascript - 在区域设置存储中编辑值?
- python - sympy 分段函数的 Lambdification 评估每个表达式
- ruby - 是否可以阻止 Net::HTTP 请求发送一些标头?
- angular - 以 Angular 2 提交表单后导航另一个页面
- mysql - ER_PARSE_ERROR 发生