c - 访问冲突 strcpy

标签 c winapi memory strcpy

每当我打电话 strcpy制作"SendEmail.exe " + log[1024]进入LCSTR我收到运行时违规异常。

我尝试调试,结果成功了:

strcpy(CmdParams, ""+log[1024]);

char log[1024];
...
if (strlen(log) > 49)
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    memset(&si, 0, sizeof(si));
    si.cb = sizeof(si);
    memset(&pi, 0, sizeof(pi));
    LPSTR CmdParams;
    strcpy(CmdParams, ""+log[1024]);
    CreateProcessA(NULL, CmdParams, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
}

应该发生的是 strcpy应该将这些值复制到 CmdParams并且下一行应该已经被执行。

最佳答案

CmdParams 是一个指针。您没有为其指向分配任何内存,甚至根本没有初始化它。这就是为什么您在 strcpy() 上遇到访问冲突的原因。

尝试更多类似这样的事情:

char log[1024];
...
int len = strlen(log);
if (len > 49)
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    memset(&si, 0, sizeof(si));
    si.cb = sizeof(si);
    memset(&pi, 0, sizeof(pi));

    LPSTR CmdParams = (LPSTR) malloc(14 + len + 1);
    if (CmdParams)
    {
        strcpy(CmdParams, "SendEmail.exe ");
        strcat(CmdParams, log);
        /* or:
        strcpy(CmdParams, "SendEmail.exe ");
        strcpy(CmdParams+14, log);
        */
        /* or:
        sprintf(CmdParams, "SendEmail.exe %s", log);
        */
        CreateProcessA(NULL, CmdParams, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
        free(CmdParams);
    }
}

关于c - 访问冲突 strcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56517630/

相关文章:

C- 检查字符串中的字符是否属于数组

c - C语言的TCP客户端和服务器

c - 反转链表并打印结果

Java - 对象越少,使用的内存就越大

python - Matplotlib 内存不足

java - 单个Linux服务器上部署多tomcat服务器,每个tomcat都有独立的JVM吗?

检查命令行参数是否为负数

c++ - 将 Windows 视觉主题与 Code::Blocks 一起使用?

c++ - 如何添加退出窗口事件?

windows - 低完整性到中/高完整性管道安全描述符