访问冲突strcpy

访问冲突strcpy,c,winapi,memory,strcpy,C,Winapi,Memory,Strcpy,每当我调用strcpy将“sendmail.exe”+日志[1024]写入LCSTR时,我都会收到一个运行时冲突异常 我尝试过调试,但它成功了: strcpy(CmdParams,“+log[1024]) char日志[1024]; ... 如果(strlen(log)>49) { STARTUPINFO si; 处理信息; memset(&si,0,sizeof(si)); si.cb=sizeof(si); memset(&pi,0,sizeof(pi)); LPSTR-CmdParams;

每当我调用
strcpy
“sendmail.exe”+日志[1024]
写入
LCSTR
时,我都会收到一个运行时冲突异常

我尝试过调试,但它成功了:

strcpy(CmdParams,“+log[1024])

char日志[1024];
...
如果(strlen(log)>49)
{
STARTUPINFO si;
处理信息;
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日志[1024];
...
int len=strlen(对数);
如果(len>49)
{
STARTUPINFO si;
处理信息;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
memset(&pi,0,sizeof(pi));
LPSTR CmdParams=(LPSTR)malloc(14+len+1);
如果(CmdParams)
{
strcpy(CmdParams,“sendmail.exe”);
strcat(CmdParams,log);
/*或:
strcpy(CmdParams,“sendmail.exe”);
strcpy(CmdParams+14,log);
*/
/*或:
sprintf(CmdParams,“SendEmail.exe%s”,日志);
*/
CreateProcessA(NULL,CmdParams,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
免费(CmdParams);
}
}

表达式
“sendmail.exe”+log[1024]
将不会连接这两个字符串。相反,它将把数组的元素号1025的内容添加到字符串文本产生的指针上。如果您想在C++中使用简单的字符串连接,请使用<代码> STD::String < /C>。如果你在C中编程,那么使用另一个足够大的数组,使用<代码> StrucP和<代码> STRCAT/CODE>。不管你用C还是C++编程(两种非常不同的语言,有两种截然不同的方法来解决这个问题,所以在将来请选择你实际正在编程的语言)。一些人甚至对语言的基本理解应该告诉你这是错误的。因此,请后退几步,回到您的课本,重新阅读有关字符串文字、数组和指针以及指针算术的章节。哦,更不用说,
CmdParams
是一个未初始化的指针。在这段小代码中有很多未定义行为的实例。@Someprogrammerdude我如何将整个log[1024]连接到C中的CmdParams?而log[1024]在数组之外。。。