分配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)。

你可能感兴趣的:(functions)