【发布时间】:2011-09-19 18:18:59
【问题描述】:
我正在尝试让示例代码正常工作,它使用以下几行:
WCHAR cBuf[MAX_PATH];
GetSharedMem(cBuf, MAX_PATH);
printf("Child process read from shared memory: %S\n", cBuf);
获取共享内存:
__declspec(dllexport) VOID __cdecl GetSharedMem(LPWSTR lpszBuf, DWORD cchSize)
{
LPWSTR lpszTmp;
// Get the address of the shared memory block
lpszTmp = (LPWSTR) lpvMem;
// Copy from shared memory into the caller's buffer
while (*lpszTmp && --cchSize)
*lpszBuf++ = *lpszTmp++;
*lpszBuf = '\0';
}
奇怪的是,我在 printf 行上得到了一个未知的说明符错误。 %S 是 MS 扩展名,不兼容 ANSI,但我认为默认情况下会包含它。如何开启此功能?
我正在使用 microsoft visual studios,不知道如何检查我的选项
【问题讨论】:
-
你用的是什么编译器?有什么选择?
-
@Kerrek SB:打印宽字符
-
可能相关:您意识到
GetSharedMem()中存在缓冲区溢出问题?如果您设法复制MAX_PATH字符,您将无条件地设置下一个导致溢出的字符。您可能需要更正它。
标签: c windows printf format-specifiers