gpt4 book ai didi

c - 从c中的字符串数组中获取第一个字符串

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:03 25 4
gpt4 key购买 nike

我正在尝试为我的项目创建流程。我将从父进程向子进程传递参数,并且参数会及时改变,所以我想先尝试将 1 传递给子进程。字符串格式应该像这样“childname.exe c”,其中 c 代表随机字符(在本例中它是 1 表示只是试用)。

我创建了一个子名数组,我想要的只是将新字符串与子名字符串连接起来,并将其复制到另一个字符串数组(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]);
}

最佳答案

根据您的描述,您希望获得这样的字符串

"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_sstrcpy_s。最好使用标准函数 strcatstrcpy

这个演示程序中显示的是以下内容。

#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

关于c - 从c中的字符串数组中获取第一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40644112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com