如果我在嵌入式系统上痴迷于高效的内存管理,那么如何存储具有内存块效率的64字节密码之类的东西呢?
例如我会
int len = 65;
char password[len ];
memset(password, 0, len );
GetPwFunction(password);
password[len - 1] = '\0';
但是现在我用65而不是64创建了一个难看的东西(至少这是其他程序员告诉我的...)。
答案 0 :(得分:0)
+1
(即65而不是64)仅在您要存储C字符串时才需要,即,例如,要将字符串传递给printf
或{ {1}}或其他字符串函数。这些函数需要一个终止字符strlen
,因此您需要比实际内容多一个字节。如果您只想存储和检索字节,可以继续使用\0
。如果要存储8位值,我将使用64
。
答案 1 :(得分:0)
使用字节存储始终为零的值毫无意义。
您不需要使用65个字符来存储所有所有密码,只要访问分配给个人密码的64字节缓冲区的任何代码都很难-编码以达到64字节限制时停止读取/写入。
只要您使用自己的代码来读/写该缓冲区,您仍然可以为其他函数提供以null结尾的字符串-这些将是原始副本。您只需要在读取之后以及将字符串传递给其他代码之前自己添加空终止符即可(并在写入缓冲区时忽略第65个字符)。因此,无论您存储多少密码,都只需要使用一次额外的字符即可。
已经说完了所有这些……当您提到“内存 block 效率”时,我想知道您是担心数据对齐问题还是将数据拟合为特定结构。最好(假设有可能)将最大字符长度减少到63,并使用准确的64个字节来存储始终以null终止的字符串。