|
1
1
我很惊讶这似乎能奏效。如果我明白了,你就别针
更新: 好的,这里有一个参考资料: http://www.drdobbs.com/cpp/184403869
有趣的是 API documentation |
|
|
2
0
实际上,问题不在于.NET字符串作为输出缓冲区,而在于 而不是缓冲区。 sprintf(“%s”)类函数(包括wsprintf等)将对字符串上的任何参数执行strlen类型的操作—即使是snwprintf—“n”部分仅限制写入字符串的数量,而不限制从输入缓冲区读取的字符。 结果发现,输入缓冲区从来没有保证以null结尾。很多时候我们很幸运,因为如果返回的数据很小,它会在到达坏内存之前命中空值。 但是,如果其中的数据足够大,它将转到内存页的末尾。当strlen继续运行时,它会离开页面,进入城市!
我们将snwprintf改为wcsncpy()(当我们必须执行ANSI时,snwprintf是一个遗留操作->Unicode转换-为什么他不做MultiByteToWideChar(),我永远也不知道。 无论如何谢谢你的建议。 |