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

时间:2016-12-19 11:15:06

标签: c arrays string pointers

我们从用户(命令行)获取输入并将其存储在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[];

`

1 个答案:

答案 0 :(得分:0)

如果您使用new_input[i] = input[i] 你要将input[i]的角色分配给the new_input[i] 然后事情是,它不会是一个副本,它只是字符串人物地址的副本。 因此,如果你想用它的“自己的内存”制作一个真正的副本,你需要首先分配一个新字符串,然后复制新字符串中最后一个字符串的内容。

(man strdup)

要复制一个字符串指针数组,你可能会做一个基本的方法,意思是首先分配你的双重指针(char **array) 收到你的新内容。 然后循环使用我之前向您展示的方法复制所有内容