小编Adr*_*thy的帖子

在C或C++中控制shell命令行通配符扩展

我正在用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领域,我该如何控制通配符扩展?

(通过子目录递归只是一个例子.理想情况下,我试图理解控制通配符扩展的一般解决方案.)

c++ unix shell command-line wildcard

1
推荐指数
1
解决办法
5255
查看次数

奇怪的未解析的外部编译DLL

我试图按照本网站上的说明操作: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++ windows dll unresolved-external most-vexing-parse

1
推荐指数
1
解决办法
116
查看次数

索引C++字符串的最简单方法?

我希望能够遍历C++字符串中的每个字符.最简单的方法是什么?首先将其转换为C字符串?我实际上没有能够以任何方式使它工作,但这是我迄今为止所尝试的:

string word = "Foobar";  
for (int i=0; i<word.length(); ++i) {
  cout << word.data()[i] << endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ string

1
推荐指数
2
解决办法
133
查看次数

C++为什么我的代码将注册表项放在错误的目录中?

所以,我想将一个注册表项放在目录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)

c++ registrykey

1
推荐指数
1
解决办法
349
查看次数

检测用户即将登录Windows 7/8

我需要编写一个小的Windows服务,该服务应该检测用户何时尝试登录并根据某些标准拒绝访问,例如小时.

因此,我研究了当孩子有小时限制时Windows家庭安全的工作方式,并且我注意到用户(孩子)收到的消息与使用限制设置时收到的消息相似或相同

净用户用户/时间:等等

所以我怀疑这是家庭安全所使用的.

但是,我想以编程方式与"net"命令进行交互,除此之外,我想知道当用户尝试登录时,或者用户刚刚登录时是否存在要监视的事件.

我应该寻找哪种Windows API才能获得此功能?

windows winapi login

0
推荐指数
1
解决办法
262
查看次数

如果它是从Windows上的另一个进程生成的,我可以关闭进程自己的句柄吗?

我有一个调用该函数的进程CreateProcess(),但是我从不CloseHandle()从父进程调用,因为我不知道用户什么时候会退出子进程.这会导致某种泄漏还是没问题,因为当子进程关闭时,它会释放所有资源?

c++ winapi handle

0
推荐指数
1
解决办法
494
查看次数

设置数组元素时出现MSVC访问冲突

我一直在努力寻找对以下代码中出现的错误的解释:

#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值并且程序正常运行.

这是否意味着我内存不足?

c c++ memory-management

-1
推荐指数
1
解决办法
129
查看次数