首页 > 解决方案 > 根据字符串输入返回 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]的大小,而不是字符串定义的类型的大小。我怎样才能进行这种转换?这甚至可能吗?

标签: csizeof

解决方案


您可以使用一系列 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; 
}

推荐阅读