我是C ++的新手,后来遇到了这个问题。我正在尝试将大字符串发送到套接字。我已经在堆栈上看到了类似的问题,但是找不到真正的答案。例如这些:
使用C ++(Winsock TCP / IP)发送带有套接字的字符串
他们中的大多数人依赖于这样的事实:send一次调用即可发送全部数据,或者他们将使用char *代替std::string。
这是用C语言编写的小代码:
int SendAll(SOCKET client_socket, const void *data, int data_size)
{
const char *data_ptr = (const char*) data;
int bytes_sent;
while (data_size > 0)
{
bytes_sent = send(client_socket, data__ptr, data_size, 0);
if (bytes_sent == SOCKET_ERROR)
return -1;
data_ptr += bytes_sent;
data_size -= bytes_sent;
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
现在想象一下,而不是const void *data我们拥有std::string data。现在的问题是我如何可以移动指针到数据像这样data_ptr += bytes_sent;用std::string?
我出现的一种方法是检索 …
目前我有一个带有文件过滤器驱动程序的软件,在软件安装过程中,驱动程序以以下方式作为服务启动:
CreateService(serviceManager, name, displayName,
SERVICE_START | DELETE | SERVICE_QUERY_STATUS | SERVICE_STOP,
SERVICE_FILE_SYSTEM_DRIVER, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE,
path, NULL, NULL, NULL, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)
路径在哪里C:\Program Files(x86)\TSU\driver\TSUfsd.sys。
我遇到的问题是在卸载软件期间。当软件尝试删除TSUfsd.sys文件时,它会拒绝我的访问。
我检查了软件如何删除驱动程序,结果发现它用DeleteService功能删除它,并等待服务将其状态从 更改SERVICE_STOP_PENDING为SERVICE_STOPPED,如果一段时间后没有发生,它会获取服务PID并用 and 杀死ProcessTerminate它然后尝试删除该文件rmdir /S /Q C:\Program Files(x86)\TSU\。
我试图找到可能拥有文件句柄的进程(使用 Process Explorer),但找不到任何进程。然后我想也许该服务仍然存在,所以我输入了sc query TSUfsd但服务也消失了。
我还尝试更改权限并向我的用户授予完全权限,但仍然出现相同的错误。
所以我的问题是:
还有其他方法可以检查哪个进程(或其他任何进程)可以保存文件吗?
我还注意到,每当我尝试使用 Cygwin( ) 删除文件时,rm TSUfsd.sys它都会毫无问题地删除该文件。使用 cmd( ) 删除文件和使用 cygwin 删除文件有什么区别del /f <filename>?
我是c ++的新手,遇到了这个问题.这是我的代码:
class A
{
std::vector <int> vec(10);
};
Run Code Online (Sandbox Code Playgroud)
它给了我错误的说法expected a type specifier.我知道这种初始化向量的方式是不可接受的,它应该在构造函数中完成,但我很好奇为什么会失败.我也注意到了这个:
class A
{
std::vector <int> vec = std::vector<int>(10);
};
Run Code Online (Sandbox Code Playgroud)
工作得很好.
所以我的问题是为什么第二种情况仍然有效,即使我们仍然使用"预定义大小"(std::vector<int>(10))创建向量,为什么第一种情况会失败?谢谢.
PS
我正在尝试创建大小为10个整数的向量,而不是创建一个10已插入其中的向量.