我们从用户(命令行)获取输入并将其存储在in char* input[]
中。
当用户输入所有必需信息时,此输入将如下所示:
input[]: add John Smith (male) <relation> Emma Stone (female)
。
然后我们想要将其复制到new_input[]
有8个位置(例如John
将位于位置1)。在我们的第一个例子中,这看起来是一样的:
new_input []: add John Smith (male) <relation> Emma Stone (female)
但是我们可能无法从用户那里获得所有信息。特别是我们很可能没有得到姓氏。因此,在复制过程中,我们需要添加一些“if-statements”来检查用户是否放置了例如是Smith
还是不。如果不是 - 我们希望在位置2和6处写入“NULL”。数组看起来像:
if input []: add John (male) <relation> Emma (female)
new_input []: add John NULL (male) <relation> Emma NULL (female)
不幸的是,我们在将字符串指针数组复制到新数组时遇到了困难。
我们尝试了memcpy()
,new_input[i] = input[i]
(在for循环中)。
编辑:这是代码,我也编辑上面的例子,(new_input在位置2上为NULL,如果缺少姓氏则为6)
`int main(int argc, char* argv[])
{
char* copy_input = NULL;
int len_max = 256;
int error = 1;
char* input = (char*) malloc(len_max* sizeof(char));
if (argc == 1)
{
while(1)
{
printf("cmd> ");
char read[len_max];
input = fgets(read, len_max, stdin);
int len = strlen(read);`
if(read[len-1] == '\n')
{
read[len-1] = '\0';
}
copy_input = input;``
error = handleUserInput (copy_input);
}`
在handle user命令中,我们按空格分割字符串并检查第一个字符串,如果它是&#34;添加&#34; ,转到函数addCommand(in)
`
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);
}`
在函数add命令中,我们想要复制输入到new_input,如上所述......
`int addCommand(char* input[]) //
{
char* new_input[];
`
答案 0 :(得分:0)
如果您使用new_input[i] = input[i]
你要将input[i]
的角色分配给the new_input[i]
然后事情是,它不会是一个副本,它只是字符串人物地址的副本。
因此,如果你想用它的“自己的内存”制作一个真正的副本,你需要首先分配一个新字符串,然后复制新字符串中最后一个字符串的内容。
(man strdup)
要复制一个字符串指针数组,你可能会做一个基本的方法,意思是首先分配你的双重指针(char **array)
收到你的新内容。
然后循环使用我之前向您展示的方法复制所有内容