C++正在尝试进行某种VARCHAR

C++ Trying to do some kind of VARCHAR

本文关键字:VARCHAR C++      更新时间:2023-10-16

我正在编写一个小型数据库管理器,但在执行VARCHAR类型的操作时遇到了问题。

它应该是这样工作的:我有一个3位数的单词,比如"RPG",它应该分配足够的大小来放置RPG\0。

发生了什么:如果我使用new、malloc(3)、malloc(1)、mallock(sizeof(char)*"RPG".size()),我总是可以在内存中使用更大的区域。我试着用malloc_size()检查它,它总是返回16。

我该怎么做才能分配足够的空间?

编辑:

没有具体的代码,我正在尝试,并试图弄清楚如何制作不同大小的字符,但它会是这样的:

char * myChar1 = (char*)malloc(sizeof(unsigned short int));
size_t howManyBytes = malloc_size(myChar1);
cout << "howManyBytes: " << howManyBytes << " bytes" << ends; //should say 2, instead it says 16
strcpy(myChar1,"HELLO HOW ARE YOU"); //shouldn't write the entire sentence as its bigger than 2 bytes
cout << "MYCHAR1: " << myChar1 << endl; //string
cout << "&MYCHAR1: " << &myChar1 << endl; //adress
cout << "*MYCHAR1: " << *myChar1 << endl; //first letter

看起来您在一个64位系统上,所以系统在16字节的边界上分配内存块,所以您得到的数据是16的倍数。由于分配的每个块都必须从16的倍数的地址开始,如果它只给你4个字节,那么其他12个字节无论如何都不可用,因为分配的块不能从12字节段的开头开始。