gpt4 book ai didi

c - 函数中引用了未解析的外部符号 _wcstok

转载 作者:太空宇宙 更新时间:2023-11-04 04:32:10 25 4
gpt4 key购买 nike

#include <ntddk.h>
#include <string.h>

.....

PWCHAR tmpBuf = NULL, pwBuf = NULL;;

tmpBuf = ExallocatePoolWithTag(NonPagePool, (MAX_SIZE + 1) * sizeof(WCHAR), BUFFER_TAG);
pwBuf = ExAllocatePoolWithTag(NonPagedPool, (MAX_SIZE + 1) * sizeof(WCHAR), BUFFER_TAG);

RtlStringCchPrintfW(tmpBuf, MAX_SIZE + 1, L"ws", ProcName);

pwBuf = wcstok(tmpBuf, L"\\");

...

错误信息:

error LNK2019: unresolved external symbol _wcstok referenced in function

但是。 wcslen 有效

最佳答案

Microsoft 可能试图强制您使用 wsctok_s而不是符合标准但不可重入wsctok ,尤其是在与 Windows 内核链接的设备驱动程序代码中。

如果strtok_s也不见了,这意味着用于内核和驱动程序开发的 C 库不完整。您处于托管环境中,部分标准 C 库可能丢失。

请注意,您没有为 wcstok() 使用旧原型(prototype): Microsoft 更改了 wcstok 的原型(prototype)在其 VisualStudio 2015 中使其符合 C 标准:

 wchar_t *wcstok(wchar_t *restrict ws1, const wchar_t *restrict ws2,
wchar_t **restrict ptr);

最好避免使用此函数并更改代码以使用 wcschr()直接。

如果wcschr也缺少,使用这个简单的实现:

/* 7.29.4.5 Wide string search functions */
wchar_t *wcschr(const wchar_t *s, wchar_t c) {
for (;;) {
if (*s == c)
return (wchar_t *)s;
if (*s++ == L'\0')
return NULL;
}
}

这是一个符合标准的 wcstok() 实现:

wchar_t *wcstok(wchar_t *restrict s1, const wchar_t *restrict s2,
wchar_t **restrict ptr) {
wchar_t *p;

if (s1 == NULL)
s1 = *ptr;
while (*s1 && wcschr(s2, *s1))
s1++;
if (!*s1) {
*ptr = s1;
return NULL;
}
for (p = s1; *s1 && !wcschr(s2, *s1); s1++)
continue;
if (*s1)
*s1++ = L'\0';
*ptr = s1;
return p;
}

关于c - 函数中引用了未解析的外部符号 _wcstok,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34847533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com