查看 WCHAR* 是否是 C 中 WCHAR 的子串
See if WCHAR* is substring of WCHAR in C
我正在使用 Windows 函数 CreateToolhelp32snapshot
枚举我机器上的 运行 个进程。 pe32.szeFileName
字段 returns 是一个 WCHAR
,这是可执行文件的名称。
我想将每个可执行文件名称与我生成的一长串可执行文件进行比较,如下所示:
WCHAR* processNames[numProcesses] = { "word", "excel", "outlook, ...}
不幸的是,我不知道如何检查 这个 processNames 数组的任何元素是否是从 pe32.szeFilename
返回的 WCHAR
的子串 。
我知道如果我处理两个 const wchar_t *
字符串,wcsstr
会起作用。如何将 pe32.szeFilename
返回的 WCHAR
与字符串数组的每个元素进行比较?具体来说,我想看看数组中的任何字符串(任何格式都可以)是 WCHAR
.
的子字符串
编辑: 我当前的循环:
do {
wprintf(L"Process name: %s\n", pe32.szExeFile);
for (int i = 0; i < numProcesses; ++i) {
if (wcsstr(pe32.szExeFile, processNames[i])) {
// Found it
wprintf("%s", pe32.szExeFile);
}
}
} while (Process32Next(hProcessSnap, &pe32));
问题标记为unicode
,所以我想,你应该尝试将所有文字声明更改为L"characters"
,例如:
WCHAR* processNames[numProcesses] = { L"word", L"excel", L"outlook", ...}
然后检查是否使用了适当的 unicode 函数,例如UNICODE
已定义或使用 W
的函数名称:
Process32FirstW(hProcessSnap, &pe32);
. . .
Process32NextW(hProcessSnap, &pe32);
最后(从那个开始,也许这可以让你看到 if
条件的结果),使用 L"%s"
for wprintf
:
wprintf(L"%s", pe32.szExeFile);
更新:
只是为了检查 wprintf
的行为,我写了一小段代码(Visual Studio 使用了 2013),所以
的结果
#include <tchar.h>
#include <windows.h>
int main(void)
{
WCHAR* procName = L"excel";
WCHAR* processNames[3] = { L"word", L"excel", L"outlook" };
wprintf(L"Process name: %s\n", procName);
for (int i = 0; i < 3; ++i) {
if (wcsstr(procName, processNames[i])) {
wprintf("%s", procName);
}
}
return 0;
}
是
Process name: excel
(即看起来 if
有错误条件),
但是代码(只为 wprintf
内部循环添加了一个 L
)
#include <tchar.h>
#include <windows.h>
int main(void)
{
WCHAR* procName = L"excel";
WCHAR* processNames[3] = { L"word", L"excel", L"outlook" };
wprintf(L"Process name: %s\n", procName);
for (int i = 0; i < 3; ++i) {
if (wcsstr(procName, processNames[i])) {
wprintf(L"%s", procName);
}
}
return 0;
}
显示
Process name: excel
excel
我正在使用 Windows 函数 CreateToolhelp32snapshot
枚举我机器上的 运行 个进程。 pe32.szeFileName
字段 returns 是一个 WCHAR
,这是可执行文件的名称。
我想将每个可执行文件名称与我生成的一长串可执行文件进行比较,如下所示:
WCHAR* processNames[numProcesses] = { "word", "excel", "outlook, ...}
不幸的是,我不知道如何检查 这个 processNames 数组的任何元素是否是从 pe32.szeFilename
返回的 WCHAR
的子串 。
我知道如果我处理两个 const wchar_t *
字符串,wcsstr
会起作用。如何将 pe32.szeFilename
返回的 WCHAR
与字符串数组的每个元素进行比较?具体来说,我想看看数组中的任何字符串(任何格式都可以)是 WCHAR
.
编辑: 我当前的循环:
do {
wprintf(L"Process name: %s\n", pe32.szExeFile);
for (int i = 0; i < numProcesses; ++i) {
if (wcsstr(pe32.szExeFile, processNames[i])) {
// Found it
wprintf("%s", pe32.szExeFile);
}
}
} while (Process32Next(hProcessSnap, &pe32));
问题标记为unicode
,所以我想,你应该尝试将所有文字声明更改为L"characters"
,例如:
WCHAR* processNames[numProcesses] = { L"word", L"excel", L"outlook", ...}
然后检查是否使用了适当的 unicode 函数,例如UNICODE
已定义或使用 W
的函数名称:
Process32FirstW(hProcessSnap, &pe32);
. . .
Process32NextW(hProcessSnap, &pe32);
最后(从那个开始,也许这可以让你看到 if
条件的结果),使用 L"%s"
for wprintf
:
wprintf(L"%s", pe32.szExeFile);
更新:
只是为了检查 wprintf
的行为,我写了一小段代码(Visual Studio 使用了 2013),所以
#include <tchar.h>
#include <windows.h>
int main(void)
{
WCHAR* procName = L"excel";
WCHAR* processNames[3] = { L"word", L"excel", L"outlook" };
wprintf(L"Process name: %s\n", procName);
for (int i = 0; i < 3; ++i) {
if (wcsstr(procName, processNames[i])) {
wprintf("%s", procName);
}
}
return 0;
}
是
Process name: excel
(即看起来 if
有错误条件),
但是代码(只为 wprintf
内部循环添加了一个 L
)
#include <tchar.h>
#include <windows.h>
int main(void)
{
WCHAR* procName = L"excel";
WCHAR* processNames[3] = { L"word", L"excel", L"outlook" };
wprintf(L"Process name: %s\n", procName);
for (int i = 0; i < 3; ++i) {
if (wcsstr(procName, processNames[i])) {
wprintf(L"%s", procName);
}
}
return 0;
}
显示
Process name: excel
excel