typedef для массива структур с одним массивом символов в качестве члена для структуры

Я обычно объявляю переменную в 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. Как arr[1] в выражении typedef изменено на arr[25] во второй строке?

0

Решение

Из показанного вами предварительно скомпилированного кода я бы сказал, что

VARCHAR myvar[25];

интерпретируется как этот SQL

myvar varchar(25)

что также генерируется, обратите внимание char arr[25]

struct { unsigned short len; unsigned char arr[25]; } myvar;
1

Другие решения

  1. myvar это объект, который резервирует память для массива для символов myvar.arr[25] и длина строки myvar.len, Что еще нужно?
  2. Это, вероятно, структура взломать. Я думаю, он используется для создания общих указателей VARCHAR.

Пример:

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

Вызывается так:

PrintVarChar((VARCHAR*)&myvar);
1

По вопросам рекламы [email protected]