每当我打电话 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/