zoukankan      html  css  js  c++  java
  • 分配buffer用来存储字符串时,始终多分配一个字符,make all string functions HAPPY!

    SDClient中,使用HeapAlloc分配了一块内存,用来存放从text resource file中读出的内容。然后接着会使用_tcstok_s来使用\n作为token来split这个大字符串。

    那 为什么在分配内存的时候,要多分配一个字符的内存呢?很简单,这个字符要存放一个\0。因为text resource file文件的最后没有\0,所以,当把text resource file的内容全部读出来之后,要手动设置最后一个字符为\0,这样,_tcstok_s来split到最后的时候才能正确工作。否则,由于最后一个 token后面既没有\n,也没有\0,那么,_tcstok_s就会读到buffer外面去,直至读到一个\n或是\0,从而导致程序逻辑出错。

    BTW:多分配一个字符的时候,分配的内存字节数应该是:sizeof(TCHAR);设置多分配的最后一个字符是\0的时候,也要设置成(TCHAR)\0(内存中是0x00 0x00)。
  • 相关阅读:
    0x1L
    失败全是无能,成功多是侥幸。
    也谈不甘
    维护网站小笔记
    C#反射(二) 【转】
    C#反射(一) 【转】
    短期学习目标
    局域网手机遥控关机
    密码验证
    字符串反转
  • 原文地址:https://www.cnblogs.com/super119/p/2011410.html
Copyright © 2011-2022 走看看