我正在用C++编写一个程序foo.它通常在命令行上调用,如下所示:
foo *.txt
Run Code Online (Sandbox Code Playgroud)
我main()以正常方式接收参数.在许多系统上,argv[1]字面意思是*.txt,我必须调用系统例程来进行通配符扩展.但是,在Unix系统上,shell会在调用我的程序之前扩展通配符,并且所有匹配的文件名都将在其中argv.
假设我想添加一个开关到foo,导致它递归到子目录.
foo -a *.txt
Run Code Online (Sandbox Code Playgroud)
将处理当前目录及其所有子目录中的所有文本文件.
我没有看到这是如何完成的,因为当我的程序有机会看到它时-a,shell已经完成了扩展并且用户的*.txt输入丢失了.然而,有一些常见的Unix程序以这种方式工作.他们是如何做到的呢?
在Unix领域,我该如何控制通配符扩展?
(通过子目录递归只是一个例子.理想情况下,我试图理解控制通配符扩展的一般解决方案.)
我试图按照本网站上的说明操作:http: //support.microsoft.com/kb/q168958
这是代码:
#include <windows.h>
#include <malloc.h>
namespace Test {
template<class TYPE> class TestBuffer
{
private:
TYPE* m_pData;
size_t m_uSize;
public:
TestBuffer(size_t uSize) : m_pData(NULL), m_uSize(0)
{
m_pData = (TYPE*)malloc(uSize * sizeof(TYPE));
}
~TestBuffer() { if (NULL != m_pData) free(m_pData); }
public:
bool IsValid() const { return NULL != m_pData; }
operator TYPE*() const { return m_pData; }
};
template class __declspec(dllexport) Test::TestBuffer<wchar_t>;
__declspec(dllexport) bool GetCurrentDir(char* szDir, size_t uSize)
{
DWORD dwRequiredSize = ::GetCurrentDirectoryW(0, NULL);
Test::TestBuffer<wchar_t> wideCharBuffer(size_t(dwRequiredSize));
bool …Run Code Online (Sandbox Code Playgroud) 我希望能够遍历C++字符串中的每个字符.最简单的方法是什么?首先将其转换为C字符串?我实际上没有能够以任何方式使它工作,但这是我迄今为止所尝试的:
string word = "Foobar";
for (int i=0; i<word.length(); ++i) {
cout << word.data()[i] << endl;
}
Run Code Online (Sandbox Code Playgroud) 所以,我想将一个注册表项放在目录HKCU\Software\Microsoft\Windows\CurrentVersion\Run中,我希望它被称为Test,并让它包含"TestText",但是这段代码将一个新密钥放在HKCU\Test和程序在注册表项中写入随机中文字符.有人帮吗?
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <string>
#include <time.h>
using namespace std;
int main()
{
HKEY keyExample;
if (RegOpenKey(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"), &keyExample) != ERROR_SUCCESS)
{
RegCloseKey(keyExample);
return 69;
}
if (RegSetKeyValue(HKEY_CURRENT_USER, TEXT("Test"), 0, REG_SZ, (LPBYTE)"TestText", strlen("TestText")*sizeof(char)) != ERROR_SUCCESS)
{
RegCloseKey(keyExample);
cout << "Unable to set registry value value_name";
}
RegCloseKey(keyExample);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我需要编写一个小的Windows服务,该服务应该检测用户何时尝试登录并根据某些标准拒绝访问,例如小时.
因此,我研究了当孩子有小时限制时Windows家庭安全的工作方式,并且我注意到用户(孩子)收到的消息与使用限制设置时收到的消息相似或相同
净用户用户/时间:等等
所以我怀疑这是家庭安全所使用的.
但是,我想以编程方式与"net"命令进行交互,除此之外,我想知道当用户尝试登录时,或者用户刚刚登录时是否存在要监视的事件.
我应该寻找哪种Windows API才能获得此功能?
我有一个调用该函数的进程CreateProcess(),但是我从不CloseHandle()从父进程调用,因为我不知道用户什么时候会退出子进程.这会导致某种泄漏还是没问题,因为当子进程关闭时,它会释放所有资源?
我一直在努力寻找对以下代码中出现的错误的解释:
#include <stdlib.h>
int main() {
int m=65536;
int n=65536;
float *a;
a = (float *)malloc(m*n*sizeof(float));
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
a[i*n + j] = 0;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么执行此程序时出现"访问冲突"错误?
内存分配是成功的,问题是在一些迭代计数的嵌套for循环中.我尝试使用较小的m&n值并且程序正常运行.
这是否意味着我内存不足?