{"id":966,"date":"2020-05-12T21:09:20","date_gmt":"2020-05-12T13:09:20","guid":{"rendered":"http:\/\/www.mrtblog.cn\/?p=966"},"modified":"2023-03-12T15:40:30","modified_gmt":"2023-03-12T07:40:30","slug":"%e3%80%90c%e3%80%91%e5%ad%97%e7%ac%a6%e4%b8%b2%e6%8b%b7%e8%b4%9d-%e5%86%85%e5%ad%98%e6%8b%b7%e8%b4%9d%e7%9a%84%e5%ba%94%e7%94%a8","status":"publish","type":"post","link":"http:\/\/www.mrtblog.cn\/?p=966","title":{"rendered":"\u3010C++\u3011\u5b57\u7b26\u4e32\u62f7\u8d1d\/\u5185\u5b58\u62f7\u8d1d\u7684\u5e94\u7528"},"content":{"rendered":"<div class='epvc-post-count'><span class='epvc-eye'><\/span>  <span class=\"epvc-count\"> 2,910<\/span><span class='epvc-label'> Views<\/span><\/div><h3>\u4e00\u3001\u5b57\u7b26\u4e32\u62f7\u8d1d<\/h3>\n<p>\u8fd9\u91cc\u4e3b\u8981\u8ba8\u8bba\u5b57\u7b26\u4e32\u7684\u8f6c\u6362\u548c\u62fc\u63a5\u5de5\u4f5c\uff0c<br \/>\n\u5bf9\u4e8eC++\u6765\u8bf4\uff0c\u6700\u597d\u7528\u53c8\u7b80\u5355\u7684\u5b57\u7b26\u4e32\u62f7\u8d1d\u65b9\u5f0f\u662f\u4ec0\u4e48\u5462\uff0c\u90a3\u5fc5\u7136\u662f<\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">s += &quot;Hello World!&quot;;<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5b9e\u9645\u6d4b\u8bd5\u4e00\u4e0b\uff0c\u5206\u6790\u51e0\u79cd\u5b57\u7b26\u4e32\u62fc\u63a5\u7684\u6027\u80fd<br \/>\n<strong>\u573a\u666f\uff1a<\/strong>\u82e5\u5e72\u4e2a\u952e\u503c\u5bf9\uff0c\u4ee5\u4e00\u5b9a\u65b9\u6cd5\u7ec4\u5408\u6210\u5b57\u7b26\u4e32\uff0c\u7d2f\u79ef\u62f7\u8d1d\u5230char\u6570\u7ec4\u4e2d\uff0c\u8fd9\u4e00\u64cd\u4f5c\u88abX\u4e2a\u7528\u6237\u5206\u522b\u6267\u884c1\u6b21<br \/>\n<strong>\u952e\u503c\u5bf9\uff1a<\/strong>int-int\u7c7b\u578b<br \/>\n<strong>\u5bf9\u6bd4\u65b9\u6848\uff1a<\/strong>sstream\/snprintf\/+=\/append<br \/>\n<strong>\u4f8b\u5982\uff1a<\/strong><br \/>\nvector{1:3,2:4,3:111,4:333,432:444}<br \/>\n-&gt; &#8220;1,3;2,4;3,111;4,333;432,444;&#8221;<br \/>\n\u6211\u4eec\u5148\u5b9a\u4e49\u952e\u503c\u5bf9\uff0c\u7ec4\u5408\u65b9\u5f0f\u548c\u8f6e\u6b21\u7b49\u57fa\u7840\u4fe1\u606f\uff0c\u6a21\u62df\u4e00\u4e2avector\u5b58\u50a8\u952e\u503c\u5bf9<br \/>\n\u6211\u4eec\u8bbe\u8ba1\u82e5\u5e72\u4e2a\u5b57\u7b26\u4e32\u62fc\u63a5\u51fd\u6570\uff0c\u8f93\u5165\u53c2\u6570\u662fchar*\uff0c\u6700\u7ec8\u7ed3\u679c\u4fdd\u5b58\u5230char*\u4e2d<br \/>\n\u4f7f\u7528map\u4fdd\u5b58\u8fd9\u4e9b\u51fd\u6570\u548c\u4ed6\u7684\u540d\u5b57\uff0c\u7528\u4e8e\u8c03\u7528\u548c\u8f93\u51fa\u6253\u5370<\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">typedef void(*pVoid)(char*);\/\/\u5b9a\u4e49\u522b\u540d\u624d\u80fd\u653e\u5728vector\u4e2d\nmap&lt;string, pVoid&gt; FuncMap;\/\/\u4fdd\u5b58\u51fd\u6570\u6307\u9488\u7684map\n\nstruct KV1\n{\n    int Key;\n    int Value1;\n};\nvector&lt;KV1&gt; Datas;\nconst char Sym1 = &#039;,&#039;;\nconst char Sym2 = &#039;;&#039;;\nconst int NUM = 10;\/\/\u952e\u503c\u5bf9\u6570\u91cf\nconst int Round = 10000;\/\/\u6267\u884c\u8f6e\u6b21\nconst int ARRLEN = 1024;\/\/\u8f93\u51fa\u5b57\u7b26\u4e32\u6700\u5927\u957f\u5ea6\nvoid Init()\n{\n    for (size_t i = 0; i &lt; NUM; ++i)\n    {\n        static KV1 kv;\n        kv.Key = i;\n        kv.Value1 = i + rand() % 100;\n        Datas.push_back(kv);\n    }\n    FuncMap.insert(make_pair(&quot;GetCharSnprintf:&quot;, GetCharSnprintf));\/\/\u4f7f\u7528snprintf\n    FuncMap.insert(make_pair(&quot;GetCharSprintf:&quot;, GetCharSprintf));\/\/\u4f7f\u7528sprintf\n    FuncMap.insert(make_pair(&quot;GetCharSSTream:&quot;, GetCharSSTream));\/\/\u4f7f\u7528sstream\n    FuncMap.insert(make_pair(&quot;GetCharStringPlus:&quot;, GetCharStringPlus));\/\/\u4f7f\u7528+=\n    FuncMap.insert(make_pair(&quot;GetCharStringAppend:&quot;, GetCharStringAppend));\/\/\u4f7f\u7528append\n}<\/code><\/pre>\n<p>\u6bcf\u4e2a\u51fd\u6570\u6267\u884cRound\u6b21\uff0c\u6a21\u62dfRound\u4e2a\u7528\u6237\u5206\u522b\u64cd\u4f5c\u4e00\u6b21\uff0c\u5e76\u7edf\u8ba1\u64cd\u4f5c\u65f6\u95f4<\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">void CalTime(const pair&lt;string, pVoid&gt;&amp; FuncPair)\n{\n    cout.width(20);\n    cout &lt;&lt; FuncPair.first;\n    void(*p)(char*) = FuncPair.second;\/\/\u83b7\u53d6\u51fd\u6570\u6307\u9488\n    TimeStart = clock();\t\t\/\/\u7a0b\u5e8f\u5f00\u59cb\u8ba1\u65f6\n\n\n    for (int i = 0; i &lt;= Round; i++)\n    {\n        char Str[ARRLEN];\n        memset(Str, 0, sizeof(Str));\n        (*p)(Str);\/\/\u8c03\u7528\u51fd\u6570\n        if (i == 0)\n        {\n            cout &lt;&lt; Str &lt;&lt; endl;\/\/\u6253\u5370\u7b2c\u4e00\u7ec4\u6570\u636e\u4fdd\u8bc1\u8d4b\u503c\u7ed3\u679c\u6b63\u786e\n        }\n    }\n\n    TimeEnd = clock();\t\t\/\/\u7a0b\u5e8f\u7ed3\u675f\u7528\u65f6\n    double endtime = (double)(TimeEnd - TimeStart) \/ CLOCKS_PER_SEC;\n    cout.width(20);\n    cout &lt;&lt; &quot;Total time:&quot; &lt;&lt; endtime * 1000 &lt;&lt; &quot;ms&quot; &lt;&lt; endl;\t\/\/ms\u4e3a\u5355\u4f4d\n}<\/code><\/pre>\n<p>\u5728main\u51fd\u6570\u91cc\u521d\u59cb\u5316\u5e76\u8c03\u7528<\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">int main() {\n    Init();\n    for (auto i : FuncMap)\n    {\n        CalTime(i);\n    }\n    return 0;\n}<\/code><\/pre>\n<p>\u63cf\u8ff0\u4e00\u4e0b\u5de5\u4f5c\uff0c\u6211\u4eec\u9700\u8981\u4ecevector\u4e2d\u53d6\u51fa\u952e\u503c\u5bf9\uff0c\u7ec4\u6210\u4e00\u4e2a\u5b57\u7b26\u4e32\u5e76\u8f93\u51fa<br \/>\n\u63a5\u4e0b\u6765\u6211\u4eec\u4e00\u4e2a\u4e2a\u6765\u770b\u9700\u8981\u6d4b\u8bd5\u7684\u51fd\u6570<br \/>\n\u9996\u5148\u662f<strong>+=<\/strong>\uff0c\u5c06\u952e\u503c\u5bf9\u7684int\u8f6c\u6362\u4e3astring\uff0c\u548c\u7ec4\u88c5\u5b57\u7b26\u4f9d\u6b21\u8fdb\u884c&#8217;+=&#8217;<\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">void GetCharStringPlus(char* Str)\n{\n    string s;\n    for (size_t i = 0; i &lt; Datas.size(); ++i)\n    {\n        s += IntToString(Datas[i].Key) + &quot;,&quot; + IntToString(Datas[i].Value1) + &quot;;&quot;;\n    }\n    const char* c = s.c_str();\n    strncpy_s(Str, ARRLEN, c, strlen(c));\n}<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765<strong>append<\/strong>\uff0c\u548c&#8217;+=&#8217;\u552f\u4e00\u7684\u533a\u522b\u662f\u4e0d\u80fd\u5199\u5728\u540c\u4e00\u884c<\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">void GetCharStringAppend(char* Str)\n{\n    string s;\n    for (size_t i = 0; i &lt; Datas.size(); ++i)\n    {\n        s.append(IntToString(Datas[i].Key));\n        s.append(&quot;,&quot;);\n        s.append(IntToString(Datas[i].Value1));\n        s.append(&quot;;&quot;);\n    }\n    const char* c = s.c_str();\n    strncpy_s(Str, ARRLEN, c, strlen(c));\n}<\/code><\/pre>\n<p>\u518d\u6765\u662f<strong>sstream<\/strong>\uff0c\u548c+=\u540c\u6837\u7b80\u6d01\u7684\u8bed\u6cd5<\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">void GetCharSSTream(char* Str)\n{\n    static stringstream ss;\n    ss.str(&quot;&quot;);\n    for (size_t i = 0; i &lt; Datas.size(); ++i)\n    {\n        ss &lt;&lt; Datas[i].Key &lt;&lt; &quot;,&quot; &lt;&lt; Datas[i].Value1 &lt;&lt; &quot;;&quot;;\n    }\n    \/\/\u8fd9\u91cc\u9700\u8981\u7528tmp\u4fdd\u5b58\u7ed3\u679c, \u5982\u679c\u7528const char*\u5185\u5bb9\u5c06\u4f1a\u88ab\u91ca\u653e\n    string tmp = ss.str();\n    strncpy_s(Str, ARRLEN, tmp.c_str(), tmp.size());\n}<\/code><\/pre>\n<p>\u540c\u6837\u5f88\u5c0f\u5de7\u7684<strong>sprintf<\/strong><\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">void GetCharSprintf(char* Str)\n{\n    for (size_t i = 0; i &lt; Datas.size(); ++i)\n    {\n        char tmp[ARRLEN];\n        sprintf_s(tmp, ARRLEN, &quot;%d%s%d%s&quot;, Datas[i].Key, &quot;,&quot;, Datas[i].Value1, &quot;;&quot;);\n        strcat_s(Str, ARRLEN, tmp);\n    }\n}<\/code><\/pre>\n<p>\u6700\u540e\u662f\u50bb\u74dc\u5f0f\u7684<strong>snprintf<\/strong>\uff0c\u4ee3\u7801\u6709\u70b9\u6050\u6016<\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">void GetCharSnprintf(char* Str)\n{\n    _snprintf_s(Str, ARRLEN - 1, ARRLEN - 1, &quot;%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s%d%s&quot;,\n    Datas[0].Key, &quot;,&quot;, Datas[0].Value1, &quot;;&quot;,\n    Datas[1].Key, &quot;,&quot;, Datas[1].Value1, &quot;;&quot;,\n    Datas[2].Key, &quot;,&quot;, Datas[2].Value1, &quot;;&quot;,\n    Datas[3].Key, &quot;,&quot;, Datas[3].Value1, &quot;;&quot;,\n    Datas[4].Key, &quot;,&quot;, Datas[4].Value1, &quot;;&quot;,\n    Datas[5].Key, &quot;,&quot;, Datas[5].Value1, &quot;;&quot;,\n    Datas[6].Key, &quot;,&quot;, Datas[6].Value1, &quot;;&quot;,\n    Datas[7].Key, &quot;,&quot;, Datas[7].Value1, &quot;;&quot;,\n    Datas[8].Key, &quot;,&quot;, Datas[8].Value1, &quot;;&quot;,\n    Datas[9].Key, &quot;,&quot;, Datas[9].Value1, &quot;;&quot;\n    );\n}<\/code><\/pre>\n<p>\u597d\u4e86\uff0c\u6267\u884cmain\u51fd\u6570\uff0c\u5bf910\u5bf9\u952e\u503c\u5bf9\u7ec4\u5408\u62fc\u63a510000\u6b21\uff0c\u731c\u4e00\u731c\u8c01\u662f\u6548\u7387\u6700\u9ad8\u7684\u5c0f\u4f19\u4f34(\u6211\u731c\u662fsnprintf)<\/p>\n<pre class=\"highlight\"><code class=\"language-shell line-numbers\">GetCharSSTream:                0,41;1,68;2,36;3,3;4,73;5,29;6,84;7,65;8,70;9,73;\nTotal time:885ms\nGetCharSnprintf:               0,41;1,68;2,36;3,3;4,73;5,29;6,84;7,65;8,70;9,73;\nTotal time:129ms\nGetCharSprintf:                0,41;1,68;2,36;3,3;4,73;5,29;6,84;7,65;8,70;9,73;\nTotal time:182ms\nGetCharStringAppend:           0,41;1,68;2,36;3,3;4,73;5,29;6,84;7,65;8,70;9,73;\nTotal time:2465ms\nGetCharStringPlus:             0,41;1,68;2,36;3,3;4,73;5,29;6,84;7,65;8,70;9,73;\nTotal time:2979ms<\/code><\/pre>\n<p>\u53ef\u4ee5\u770b\u5230\u7ed3\u679c\u90fd\u662f\u6b63\u786e\u7684\uff0c<br \/>\nsnprintf\u679c\u4e0d\u5176\u7136\u901f\u5ea6\u6700\u5feb\uff0c\u53ea\u9700\u8981129ms\uff0c\u4f46\u662f\u6269\u5c55\u6027\u5f88\u5dee\uff0cvector\u65b0\u589e\u5143\u7d20\u5c31\u8981\u5f00\u59cb\u6bc1\u706d\u5f0f\u7f16\u7a0b<br \/>\nsprintf\u4e0esnprintf\u76f8\u5dee\u65e0\u51e0\uff0c\u9700\u8981182ms\uff0c\u6269\u5c55\u6027\u80fd\u4e5f\u5f88\u597d\uff0c\u503c\u5f97\u4f7f\u7528<br \/>\nsstream\u901f\u5ea6\u6392\u884c\u7b2c\u4e09\uff0c885ms\uff0c\u6000\u7591\u662f\u8f93\u5165\u6d41\u7684\u5904\u7406\u803d\u8bef\u4e86\u65f6\u95f4<br \/>\n\u6700\u540eappend\u548c+=\u7684\u901f\u5ea6\u4e0d\u5fcd\u76f4\u89c6\uff0c\u4e3b\u8981\u662fint2string\u8fdb\u884c\u4e86string\u7684\u62f7\u8d1d\uff0c\u4e25\u91cd\u6d88\u8017\u6027\u80fd\uff0c\u800c\u4e14+=\u6bd4append\u8fd8\u8981\u66f4\u6162\u4e00\u4e9b<\/p>\n<p>\u5230\u8fd9\u91cc\u5e94\u8be5\u5c31\u660e\u767d\uff0c\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\u9009\u62e9\u5408\u9002\u7684\u65b9\u6cd5\u662f\u4e00\u4ef6\u591a\u4e48\u91cd\u8981\u7684\u4e8b\u60c5<\/p>\n<hr>\n<h3>\u4e8c\u3001\u5185\u5b58\u62f7\u8d1d<\/h3>\n<p>\u8bbe\u60f3\u4e00\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u6709\u7ed3\u6784\u4f53StructA\u3001StructB\u3001StructC\u5982\u4e0b\u8868\u793a<\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">struct structA\n{\n    int ID[3];\n    char Level[3];\n    char TimeStamp[3][32];\n};\nstruct structB\n{\n    int ID[3];\n    char Level[3];\n    char TimeStamp[3][32];\n};\nstruct structC\n{\n    int ID1;\n    char Level1;\n    char TimeStamp1[32];\n    int ID2;\n    char Level2;\n    char TimeStamp2[32];\n    int ID3;\n    char Level3;\n    char TimeStamp3[32];\n};<\/code><\/pre>\n<p>\u73b0\u5728\u6211\u4eec\u56e0\u4e3a\u4e00\u4e9b\u539f\u56e0\u8981\u5c06\u5404\u4e2aStruct\u7684\u6570\u636e\u76f8\u4e92\u62f7\u8d1d,\u5e94\u8be5\u5982\u4f55\u5b9e\u73b0\uff1f<br \/>\n\u5f88\u81ea\u7136\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u4e3a\u7ed3\u6784\u4f53\u6bcf\u4e00\u4e2a\u5b57\u6bb5\u8fdb\u884c\u8d4b\u503c\uff0c\u4f8b\u5982\u4eceA\u5230B\u4ee5\u53caB\u5230C\u7684\u62f7\u8d1d<\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">void CopyA2B(const structB&amp; a, structB&amp; b)\n{\n    for (int i = 0; i &lt; 3; ++i)\n    {\n        b.ID[i] = a.ID[i];\n        b.Level[i] = a.Level[i];\n        strcpy_s(b.TimeStamp[i], a.TimeStamp[i]);\n    }\n}\nvoid CopyB2C(const structB&amp; b, structC&amp; c)\n{\n    c.ID1 = b.ID[0];\n    c.ID2 = b.ID[1];\n    c.ID3 = b.ID[2];\n    c.Level1 = b.Level[0];\n    c.Level2 = b.Level[1];\n    c.Level3 = b.Level[2];\n    strcpy_s(c.TimeStamp1, b.TimeStamp[0]);\n    strcpy_s(c.TimeStamp2, b.TimeStamp[1]);\n    strcpy_s(c.TimeStamp3, b.TimeStamp[2]);\n}<\/code><\/pre>\n<p>\u770b\u8d77\u6765\u5b9e\u5728\u662f\u592a\u81c3\u80bf\u4e86\uff01\u6211\u4eec\u5c1d\u8bd5\u5b9a\u4e49\u4e00\u4e2a\u5b8f\u8ba9\u4ed6\u7f8e\u89c2\u4e00\u70b9<\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">#define COPYA2B(i, A, B)\\\nB.ID[i] = A.ID[i];\\\nB.Level[i] = A.Level[i];\\\nstrcpy_s(B.TimeStamp[i], A.TimeStamp[i]);\nvoid CopyA2B(const structB&amp; a, structB&amp; b)\n{\n    for (int i = 0; i &lt; 3; ++i)\n    {\n        COPYA2B(i, a, b);\n    }\n}\n#define COPYB2C(i, B, C)\\\nC.ID##i = B.ID[i-1];\\\nC.Level##i = B.Level[i-1];\\\nstrcpy_s(C.TimeStamp##i, B.TimeStamp[i-1]);\nvoid CopyB2C(const structB&amp; b, structC&amp; c)\n{\n    COPYB2C(1, b, c);\n    COPYB2C(2, b, c);\n    COPYB2C(3, b, c);\n}<\/code><\/pre>\n<p>define\u7684\u529f\u52b3\u4f7f\u5f97\u51fd\u6570\u4f3c\u4e4e\u597d\u770b\u4e86\u4e00\u4e9b\uff0c\u5176\u5b9e\u672c\u8d28\u4e0a\u6ca1\u6709\u53d1\u751f\u53d8\u5316\uff0c<br \/>\n\u5982\u679c\u65b0\u589eStruct\u7684\u5b57\u6bb5\u90fd\u8981\u52b3\u795e\u53bb\u4fee\u6539\uff0c\u90a3\u4e48\u6709\u6ca1\u6709\u4e00\u79cd\u65b9\u6cd5\u80fd\u4e00\u52b3\u6c38\u9038\u5462<br \/>\n\u529e\u6cd5\u80af\u5b9a\u662f\u6709\u7684\uff0c\u5148\u770b\u770bA2B\uff0c\u6211\u4eec\u4f7f\u7528\u795e\u5947\u7684<strong>memcpy<\/strong><\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">void CopyA2B(const structA&amp; a, structB&amp; b)\n{\n    memcpy(&amp;b, &amp;a, sizeof(b));\n}<\/code><\/pre>\n<p>\u4e00\u884c\u4ee3\u7801\u76f4\u63a5\u89e3\u51b3\uff0c\u53ea\u8981<strong>\u4fdd\u6301StructA\u548cStructB\u7ed3\u6784\u4e00\u81f4<\/strong>\uff0c\u5c31\u518d\u4e5f\u4e0d\u7528\u505a\u4fee\u6539\u4e86\uff01<br \/>\n\u518d\u770b\u770bB\u548cC\uff0c\u4ed6\u4eec\u7684\u7ed3\u6784\u4e0d\u4e00\u81f4\uff0c\u663e\u7136\u4e0d\u80fd\u76f4\u63a5\u4f7f\u7528memcpy<br \/>\n\u4ed4\u7ec6\u89c2\u5bdf\u4e00\u4e0b\u53ef\u4ee5\u53d1\u73b0\uff0c\u5176\u5b9eC\u53ea\u662f\u5c06B(\u6570\u7ec4)\u5168\u90e8\u5c55\u5f00\u4e86<br \/>\n\u8fd9\u65f6\u6211\u4eec\u4f7f\u7528\u4e00\u5957\u7ec4\u5408\u62f3<strong>offsetof+memcpy<\/strong><\/p>\n<pre class=\"highlight\"><code class=\"language-cpp line-numbers\">void CopyB2C(const structB&amp; b, structC&amp; c)\n{\n    \/\/\u5148\u6784\u9020\u51fa\u548cB\u4e00\u6837\u7684\u7ed3\u6784\n    struct _TMP_\n    {\n        int ID;\n        char Level;\n        char TimeStamp[32];\n    }tmp[3];\n    \/\/\u521d\u59cb\u5316\n    memset(&amp;tmp[0], 0, sizeof(tmp));\n    \/\/\u8d4b\u503c\n    for (int i = 0; i &lt; 3; ++i)\n    {\n        tmp[i].ID = b.ID[i];\n        tmp[i].Level = b.Level[i];\n        strcpy_s(tmp[i].TimeStamp, b.TimeStamp[i]);\n    }\n    \/\/\u8ba1\u7b97\u9700\u8981\u62f7\u8d1d\u7ed9C\u7684\u5927\u5c0f\n    int iMemCpySize = offsetof(struct structC, TimeStamp3) - offsetof(struct structC, ID1) + sizeof(c.TimeStamp3);\n    \/\/tmp\u5168\u91cf\u62f7\u8d1d\u5230C\n    memcpy(&amp;c.ID1, &amp;tmp[0], iMemCpySize);\n}<\/code><\/pre>\n<p>\u6211\u4eec\u6839\u636e\u6570\u636e\u5728\u5185\u5b58\u4e2d\u5b9e\u9645\u5b58\u50a8\u7684\u65b9\u5f0f\uff0c\u6a21\u62df\u51fa\u4e0eC<strong>\u7ed3\u6784\u76f8\u540c<\/strong>\u7684\u7ed3\u6784\u4f53<br \/>\n\u8ba1\u7b97C\u7684\u6700\u540e\u4e00\u4e2a\u6210\u5458\u4e0e\u7b2c\u4e00\u4e2a\u6210\u5458\u7684<strong>\u5730\u5740\u504f\u79fb\u91cf<\/strong>\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u4f7f\u7528memcpy\u5566<\/p>\n","protected":false},"excerpt":{"rendered":"<p>2,910 Views\u4e00\u3001\u5b57\u7b26\u4e32\u62f7\u8d1d \u8fd9\u91cc\u4e3b\u8981\u8ba8\u8bba\u5b57\u7b26\u4e32\u7684\u8f6c\u6362\u548c\u62fc\u63a5\u5de5\u4f5c\uff0c \u5bf9\u4e8eC++\u6765\u8bf4\uff0c\u6700\u597d\u7528\u53c8\u7b80\u5355\u7684\u5b57\u7b26 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[108,109],"tags":[],"class_list":["post-966","post","type-post","status-publish","format-standard","hentry","category-c-cpp","category-109"],"_links":{"self":[{"href":"http:\/\/www.mrtblog.cn\/index.php?rest_route=\/wp\/v2\/posts\/966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.mrtblog.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.mrtblog.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.mrtblog.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.mrtblog.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=966"}],"version-history":[{"count":35,"href":"http:\/\/www.mrtblog.cn\/index.php?rest_route=\/wp\/v2\/posts\/966\/revisions"}],"predecessor-version":[{"id":1258,"href":"http:\/\/www.mrtblog.cn\/index.php?rest_route=\/wp\/v2\/posts\/966\/revisions\/1258"}],"wp:attachment":[{"href":"http:\/\/www.mrtblog.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.mrtblog.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=966"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.mrtblog.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}