将字符串指针数组复制到C中的新数组

将字符串指针数组复制到C中的新数组,c,arrays,string,pointers,C,Arrays,String,Pointers,我们从用户(命令行)获取输入,并将其存储在char*input[]中。 当用户输入所有必需信息时,此输入将如下所示: input[]:添加约翰·史密斯(男)艾玛·斯通(女) 然后我们要将其复制到具有8个位置的new_input[](例如John将位于位置1)。在我们的第一个示例中,这看起来是一样的: new\u input[]:添加约翰·史密斯(男)艾玛·斯通(女) 但也有可能我们无法从用户那里获得所有信息。尤其是我们很有可能不知道姓氏。因此,在复制过程中,我们需要添加一些“if语句”,以检查用

我们从用户(命令行)获取输入,并将其存储在char*input[]中。 当用户输入所有必需信息时,此输入将如下所示:

input[]:添加约翰·史密斯(男)艾玛·斯通(女)

然后我们要将其复制到具有8个位置的
new_input[]
(例如
John
将位于位置1)。在我们的第一个示例中,这看起来是一样的:

new\u input[]:添加约翰·史密斯(男)艾玛·斯通(女)

但也有可能我们无法从用户那里获得所有信息。尤其是我们很有可能不知道姓氏。因此,在复制过程中,我们需要添加一些“if语句”,以检查用户是否输入,例如
Smith
。如果不是–我们希望在位置2和6处写入“NULL”。该阵列看起来如下所示:

如果输入[]:添加John(男性)Emma(女性)

new_input[]:添加John NULL(男性)和Emma NULL(女性)

不幸的是,我们很难将字符串指针数组复制到新数组

我们尝试了
memcpy()
new\u input[i]=input[i]
(在for循环中)

编辑:这是代码,我也编辑了上面的示例(如果姓氏丢失,则位置2和6上的新输入为NULL)

在handleuser命令中,我们按空格分割字符串并检查第一个字符串,如果它是“add”,则转到函数addCommand(in)

`

在函数add命令中,我们想将输入复制到新的_输入,如我上面所述

`int addCommand(char* input[]) //
{
char* new_input[];

`

如果您正在使用
新的\u输入[i]=输入[i]
您将把
input[i]
指针分配给
新的\u input[i]
然后问题是它不会是一个副本,它只是字符串personnaladdress的副本。 因此,如果你想用“自己的内存”制作一个真正的副本,你需要首先分配一个新字符串,然后在新的内存中复制最后一个字符串的内容

(男装)

要复制字符串指针数组,您可能需要执行一个基本方法,即首先分配双指针
(char**array)
接收您的新内容。
然后循环使用我在memcpy(new,old,count*sizeof old[0])之前向您展示的方法复制所有内容int handleUserInput(char* input) // takes char input from main and compares type of command { printf("input: %s\n",input ); char* in[8]; int i = 0; char* temp; char delimiter[] = " "; temp = strtok(input, delimiter); in[i++] = temp; while( temp != NULL) { temp = strtok(NULL, delimiter); in[i++] = temp; // printf("%s\n", temp); } if(!strcmp(in[0], "add")) { addCommand(in); }`
`int addCommand(char* input[]) //
{
char* new_input[];