【发布时间】:2019-10-24 08:05:21
【问题描述】:
每当我调用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 并且应该已经执行下一行。
【问题讨论】:
-
表达式
"SendEmail.exe " + log[1024]将不连接两个字符串。相反,它会将数组的第 1025 号元素的内容添加到字符串字面量产生的指针中。如果您想在 C++ 中进行简单的字符串连接,请使用std::string。如果您使用 C 编程,则使用另一个足够大的数组并使用strcpy和strcat。 -
无论你是用 C 还是 C++ 编程(两种非常不同的语言,对于这个问题有两种截然不同的解决方案,所以以后请选择你的语言'重新实际编程),即使是对语言的基本了解也应该告诉你这是错误的。所以请退后几步,回到你的教科书,重新阅读有关字符串文字、数组和指针以及指针算术的章节。
-
哦,更不用说
CmdParams是一个未初始化的指针。在那个小代码中,有很多未定义的行为实例。 -
@Someprogrammerdude 我如何将整个 log[1024] 连接到 C 中的 CmdParams 上?
-
和 log[1024] 在数组之外...