From 27a5968ebc28289392af120011cbe6946330d4fb Mon Sep 17 00:00:00 2001 From: Executor Date: Tue, 29 Dec 2020 11:15:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=9C=A8bv=E5=8F=B7=E5=86=85?= =?UTF-8?q?=E7=9A=84C=E8=AF=AD=E8=A8=80=E5=AE=9E=E4=BE=8B=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E4=B8=8D=E5=AE=89=E5=85=A8=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20(#119)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原示例使用全局变量`char result[13]`, 多线程中同时调用av2bv可能导致结果出错 现改为在堆内存上进行操作以及返回, 由caller来free --- other/bvID.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/other/bvID.md b/other/bvID.md index 8213c99..d1a4788 100644 --- a/other/bvID.md +++ b/other/bvID.md @@ -101,6 +101,7 @@ BV17x411w7KC ```c #include +#include #include #include @@ -109,7 +110,6 @@ char tr[124]; //反查码表 const unsigned long long Xor = 177451812; //固定异或值 const unsigned long long add = 8728348608; //固定加法值 const int s[] = {11, 10, 3, 8, 4, 6}; //位置编码表 -char result[13]; //编码结果 //初始化反查码表 void tr_init() @@ -130,12 +130,12 @@ unsigned long long bv2av(char bv[]) char* av2bv(unsigned long long av) { + char* result = (char*)malloc(13); strcpy(result,"BV1 4 1 7 "); av = (av ^ Xor) + add; for (int i = 0; i < 6; i++) result[s[i]] = table[(unsigned long long)(av / (unsigned long long)pow(58, i)) % 58]; - char *bv=result; - return bv; + return result; } int main()