0

我通常在 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;

由于 typedef 是varchar在我们使用varchar myvar[25]语句时给出的,

  1. 为什么它不创建结构数组myvar[25]
  2. typedef 语句如何arr[1]更改为arr[25]第二行?
4

2 回答 2

1
  1. myvarmyvar.arr[25]是一个对象,它为字符和字符串长度的数组保留内存myvar.len。它还需要什么?
  2. 那可能是struct hack。我猜它是用来创建通用 VARCHAR 指针的。

例子:

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

像这样调用:

PrintVarChar((VARCHAR*)&myvar);
于 2014-03-24T14:20:55.420 回答
1

从您展示的预编译代码中,我会说

VARCHAR myvar[25];

被解释为这样的 SQL

myvar varchar(25)

这也是生成的,注意char arr[25]

struct { unsigned short len; unsigned char arr[25]; } myvar;
于 2014-03-24T13:58:47.757 回答