C++ 结构数组的typedef,其中一个char数组作为结构的成员

C++ 结构数组的typedef,其中一个char数组作为结构的成员,c++,c,struct,typedef,oracle-pro-c,C++,C,Struct,Typedef,Oracle Pro C,我通常在oracle pro*c/c++中通过 VARCHAR myvar[25]; 预编译后,我的文件更改为如下所示 typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR; struct { unsigned short len; unsigned char arr[25]; } myvar; 因为当我们使用varchar myvar[25]语句时,typedef是为varchar提供的 为什么它不创建结构

我通常在oracle pro*c/c++中通过

VARCHAR myvar[25];
预编译后,我的文件更改为如下所示

typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
struct { unsigned short len; unsigned char arr[25]; } myvar;
因为当我们使用
varchar myvar[25]
语句时,typedef是为
varchar
提供的

  • 为什么它不创建结构数组
    myvar[25]
  • 如何将typedef语句中的
    arr[1]
    更改为第二行中的
    arr[25]

  • 根据您展示的预编译代码,我可以这么说

    VARCHAR myvar[25];
    
    是这样解释的

    myvar varchar(25)
    
    这也是生成的内容,请注意
    char arr[25]

    struct { unsigned short len; unsigned char arr[25]; } myvar;
    
  • myvar
    是一个对象,它为数组中的字符
    myvar.arr[25]
    和字符串长度
    myvar.len
    保留内存。它还需要什么
  • 这可能是一个错误。我猜它是用来创建一个通用的VARCHAR指针的 例如:

    void PrintVarChar(VARCHAR * vcPtr) {
        for(unsigned short i; i < vcPtr->len; ++i) {
            PrintChar(vcPtr->arr[i]);
        }
    }
    

    1)
    myvar
    :名称重复。@BLUEPIXY抱歉。如果它真的想像你上面说的那样解释,我就抓不住你了。。这个语句需要什么
    typedef struct{unsigned short len;unsigned char arr[1];}VARCHAR。请澄清。我想知道在c语言中有没有这样的概念。如果是预编译器的工作,那么就没有我不知道的问题,
    VARCHAR
    typedef是用来做什么的。在C语言中,当您分配动态内存时,可以使用这种最小的typedef。您可以说
    p=malloc(sizeof(VARCHAR)+14)
    ,这将在堆上提供大小为14的VARCHAR。但由于我既没有编写预编译器,也没有访问预编译器的文档,所以我不能肯定。。。但这似乎是未定义的行为。。oracle precompiler将如何使用未定义的行为?好吧,我没有说这是一个好的可移植实践:)oracle为什么要使用它?只有他们知道。
    PrintVarChar((VARCHAR*)&myvar);