将字符串指针数组复制到C中的新数组
我们从用户(命令行)获取输入,并将其存储在char*input[]中。 当用户输入所有必需信息时,此输入将如下所示:将字符串指针数组复制到C中的新数组,c,arrays,string,pointers,C,Arrays,String,Pointers,我们从用户(命令行)获取输入,并将其存储在char*input[]中。 当用户输入所有必需信息时,此输入将如下所示: input[]:添加约翰·史密斯(男)艾玛·斯通(女) 然后我们要将其复制到具有8个位置的new_input[](例如John将位于位置1)。在我们的第一个示例中,这看起来是一样的: new\u input[]:添加约翰·史密斯(男)艾玛·斯通(女) 但也有可能我们无法从用户那里获得所有信息。尤其是我们很有可能不知道姓氏。因此,在复制过程中,我们需要添加一些“if语句”,以检查用
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])之前向您展示的方法复制所有内容你能详细说明一下你遇到的“困难”吗?也许试着创造一个新的世界并展示给我们看?有了预期输出和实际输出的示例,您应该发布获取输入的代码以获得答案。我的意思是:最好是验证输入,而不是事后处理用户输入。请提供代码来展示不起作用的内容,你给出一堆突出显示的文本,如果不在黑暗中拍摄,我们将无法提供任何帮助。我发布了一个代码,用于获取输入,在function handleInputCommands中处理输入(这里输入被拆分,我们检查第一个单词),然后输入被发送到一个函数addCommand,我们想在这里将其保存在新数组中,这样我们就可以根据用户输入确定数组中每个字符串的固定位置……我希望这能帮到您的忙:)
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[];