我刚开始使用 cpp,我一直在关注不同的示例以从中学习,我看到缓冲区大小以不同的方式设置,例如:
char buffer[255];
StringCchPrintf(buffer, sizeof(buffer), TEXT("%s"), X);
对比
char buffer[255];
StringCchPrintf(buffer, 255*sizeof(char), TEXT("%s"), X);
正确的使用方法是什么?
我在 InternetReadFile、ZeroMemory 和 MultiByteToWideChar 等其他函数中看到过这种情况。
最佳答案
两者都不正确。
您正在使用 StringCchPrintf(),它对字符数而非字节数进行操作。 sizeof(buffer) 以字节为单位返回缓冲区的大小,255*sizeof(char) 也是如此。 255*sizeof(char) 也有一个缺点,即您在两个地方复制了数组的大小 - 如果您更改了缓冲区的大小但忘记调用 StringCchPrintf,就会出现错误。
这恰好有效,因为 sizeof(char) 始终为 1。
您还将缓冲区指定为 char,但在字符串周围使用 TEXT() - 使用 UNICODE 编译会导致中断。
以下任何一项都是正确的:
char buffer[255];
StringCchPrintf(buffer, ARRAYSIZE(buffer), "%s", X);
TCHAR buffer[255];
StringCchPrintf(buffer, ARRAYSIZE(buffer), TEXT("%s"), X);
char buffer[255];
StringCbPrintf(buffer, sizeof(buffer), "%s", X);
TCHAR buffer[255];
StringCbPrintf(buffer, sizeof(buffer), TEXT("%s"), X);
关于c++ - 缓冲区大小 : N*sizeof(type) or sizeof(var)? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2933124/