wcsstr

const wchar_t* wcsstr (const wchar_t* wcs1, const wchar_t* wcs2);

          wchar_t* wcsstr (      wchar_t* wcs1, const wchar_t* wcs2);

查找宽字符串wcs1的子字符串wcs2。

返回一个指针,该指针指向wcs1中的wcs2首次出现的位置,或则,如果wcs2不是wcs1的一部分,则返回null。

匹配的过程不包括结尾的null宽字符,但是它在那儿结束。

这是相当于strstr(<cstring>)的宽字符。

参数:

wcs1

  要扫描的C宽字符

wcs2

  包含要匹配的C宽字符序列

返回值:

  返回一个指针,该指针指向wcs1中的wcs2首次出现的位置,或则,如果wcs2不是wcs1的一部分,则返回null。

可移植性:

  在C中,该函数只被声明为:

   wchar_t *wcsstr(const wchar_t *, const wchar_t *);

而不是在C++中提供的两个重载版本

例子,使用vs2013编译:

/* wcsstr example */
#include "stdafx.h"
#include <wchar.h>
#pragma warning(disable:4996)
int main ()
{
  wchar_t wcs[] = L"This is a simple string";
  wchar_t * pwc;
  pwc = wcsstr (wcs,L"simple");
  wcsncpy (pwc,L"sample",6);
  wprintf (L"%ls\n",wcs);
  return 0;
}


会报错:

错误 1 error C4996: 'wcsncpy': This function or variable may be unsafe. Consider using wcsncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. C:\Users\xxx\Documents\Visual Studio 2013\Projects\test\test\test.cpp 133 1 test

故添加:

#pragma warning(disable:4996)


输出:



simple被替换成了sample。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include <windows.h> #include <QString> #include <QMessageBox> int main(int argc, char *argv[]) { HANDLE mutex = ::CreateMutex(Q_NULLPTR, true, (LPCWSTR)qApp->applicationName().toStdWString().c_str()); if (GetLastError() == ERROR_ALREADY_EXISTS) { QMessageBox waringBox(QMessageBox::Warning, QStringLiteral("警告"), QStringLiteral("当前程序已运行,不能再次运行!")); waringBox.setButtonText(QMessageBox::Ok, QStringLiteral("确定")); waringBox.setStandardButtons(QMessageBox::Ok); waringBox.exec(); ::CloseHandle(mutex); return 0; } // 获取当前登录用户的会话ID DWORD sessionId; ProcessIdToSessionId(GetCurrentProcessId(), &sessionId); // 遍历所有用户会话,关闭其他用户会话中的该程序进程 DWORD sessionCount; if (ProcessIdToSessionId(GetCurrentProcessId(), &sessionId) && WTSQuerySessionInformationW(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTS_INFO_CLASS::WTS_SESSION, (LPWSTR*)&sessionCount, &sessionId)) { WTS_SESSION_INFO* pSessionInfo = NULL; if (WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pSessionInfo, &sessionCount)) { for (DWORD i = 0; i < sessionCount; i++) { DWORD processCount; if (WTSEnumerateProcesses(pSessionInfo[i].hServer, pSessionInfo[i].SessionId, 1, (PWTS_PROCESS_INFO*)&processCount)) { WTS_PROCESS_INFO* pProcessInfo = NULL; if (WTSEnumerateProcesses(pSessionInfo[i].hServer, pSessionInfo[i].SessionId, 1, &pProcessInfo, &processCount)) { for (DWORD j = 0; j < processCount; j++) { if (pProcessInfo[j].SessionId != sessionId && wcsstr(pProcessInfo[j].pProcessName, qApp->applicationName().toStdWString().c_str())) { HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, pProcessInfo[j].ProcessId); if (hProcess) { ::TerminateProcess(hProcess, 0); ::CloseHandle(hProcess); } } } ::WTSFreeMemory(pProcessInfo); } } } ::WTSFreeMemory(pSessionInfo); } } // 正常执行程序 QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } 上面代码会报出 error: 'WTS_CURRENT_SERVER_HANDLE' was not declared in this scope错误,请修复后给我完整代码
最新发布
05-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值