我正在尝试为我的项目创建流程。我将从父级传递子进程的参数,并且参数将及时更改,所以我想先尝试将1传递给子进程。字符串格式应该是这样的" childname.exe c"其中c代表随机字符(在这种情况下,它仅为1试用)。
我创建了一个childname数组,并且我想要的是将新字符串与childname字符串连接起来并将其复制到另一个字符串数组(lpCommandLine变量)。当我调试下面的代码时,我看到child_name [0](当我等于0时)只返回' C'虽然我期望它返回" ChildProj1.exe"。有没有一点我错过了或如何在c?
这里有一个我在调试器中得到的图像:here stored values of in variables
#define NO_OF_PROCESS 3
char *child_names[]= {"ChildProj1.exe", "ChildProj2.exe", "ChildProj3.exe" };
char* lpCommandLine[NO_OF_PROCESS];
int i;
for (i = 0; i < NO_OF_PROCESS; i++)
lpCommandLine[i] = (char *)malloc(sizeof(char) * 16);
for (i = 0; i < NO_OF_PROCESS; i++)
{
strcat_s(child_names[i], strlen(child_names[i]), " 1");
strcpy_s(lpCommandLine[i], strlen(lpCommandLine[i]), child_names[i]);
}
答案 0 :(得分:1)
根据您的描述,您希望获得这样的字符串
"childname.exe c"
然而这个循环
for (i = 0; i < NO_OF_PROCESS; i++)
{
strcat_s(child_names[i], strlen(child_names[i]), " 1");
strcpy_s(lpCommandLine[i], strlen(lpCommandLine[i]), child_names[i]);
}
没有做你想做的事。
此循环具有未定义的行为,因为在此声明中
strcat_s(child_names[i], strlen(child_names[i]), " 1");
尝试修改字符串文字。您不能在C和C ++中更改字符串文字。
此外在本声明中
strcpy_s(lpCommandLine[i], strlen(lpCommandLine[i]), child_names[i]);
此次电话
strlen(lpCommandLine[i])
也有未定义的行为,因为此指针lpCommandLine[i]
指向的数组没有终止零。
无需使用strcat_s
和strcpy_s
功能。使用标准函数strcat
和strcpy
。
本演示程序中显示了以下内容。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NO_OF_PROCESS 3
int main(void)
{
const char * child_names[]=
{
"ChildProj1.exe",
"ChildProj2.exe",
"ChildProj3.exe"
};
const char *s = " 1";
size_t n = strlen( s );
char* lpCommandLine[NO_OF_PROCESS];
for ( int i = 0; i < NO_OF_PROCESS; i++ )
{
lpCommandLine[i] = ( char * )malloc( strlen( child_names[i] ) + n + 1 );
}
for ( int i = 0; i < NO_OF_PROCESS; i++ )
{
strcpy( lpCommandLine[i], child_names[i] );
strcat( lpCommandLine[i], s );
}
for ( int i = 0; i < NO_OF_PROCESS; i++ ) puts( lpCommandLine[i] );
for ( int i = 0; i < NO_OF_PROCESS; i++ ) free( lpCommandLine[i] );
return 0;
}
程序输出
ChildProj1.exe 1
ChildProj2.exe 1
ChildProj3.exe 1
答案 1 :(得分:0)
而不是char * child_names[]
你的意思是char[][] child_names
,char[] * child_names
或char ** child_names
?
答案 2 :(得分:0)
做字符串concat do
size_t sz = strlen(child_names[i]) + 3; // space, '1' and \0
char *buff = malloc(sz);
strcat_s(buff,sz,child_names[i]);
strcat_s(buff,sz," 1");