将命令行参数复制到数组中



对于一个程序,我想使用malloc()对命令行发送的参数进行数组复制。

例如,如果我做/a。一二三我想要一个包含{a的数组。出,一,二,三}进去。

然而,我有一些问题让我的程序工作。我有:

static char** duplicateArgv(int argc, char **argv)                                                                                                                                                         
{                                                                                                                                                                                                                                                                                                                                                                                       
    char *array;                                                                                                                                                                                                                                                                                                                                                               
    int j = 0;                                                                                                                                                                                        
    // First allocate overall array with each element of char*                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
    array = malloc(sizeof(char*) * argc);                                                                                                                                                       
    int i;                  
    // For each element allocate the amount of space for the number of chars in each      argument                                                                                                                                                              
    for(i = 1; i < (argc + 1); i++){                                                                                                                                                                      
        array[i] = malloc(strlen(*(argv + i)) * sizeof(char));                                                                                                                                        
        int j;       
        // Cycle through all the chars and copy them in one by one                                                                                                                                                                                 
        for(j = 0; j < strlen(*(argv + i)); j++){                                                                                                                                                     
            array[i][j] = *(argv + i)[j];                                                                                                                                                                                                                                                                                                                                                       
        }                                                                                                                                                                                             
    }                                                                                                                                                                                                 
    return array;
}

就像你想象的那样,这行不通。如果这在某种程度上完全没有意义,我提前道歉,因为我刚刚开始学习指针。此外,我不太确定如何编写代码来释放*数组中的每个元素后,我做了我需要的复制。

有没有人能给我一些建议,告诉我应该研究什么才能使它像我想要的那样?

谢谢你的帮助!

您没有分配或复制终止NULL字符:

这一行需要修改为NULL

array[i] = malloc((strlen(*(argv + i)) + 1) * sizeof(char));   

循环应该改成这样:

for(j = 0; j <= strlen(*(argv + i)); j++){ 

同样,如果您保存strlen()调用的结果,代码可以得到更好的优化,因为您在很多地方调用它。

试试这样的循环:

// For each element allocate the amount of space for the number of chars in each argument
for(i = 0; i < argc; i++){
    int length = strlen(argv[i]);
    array[i] = malloc((length + 1) * sizeof(char));
    int j;
    // Cycle through all the chars and copy them in one by one
    for(j = 0; j <= length; j++){
        array[i][j] = argv[i][j];
    }
}

首先你需要分配一个char*的向量,而不仅仅是一个char*

char **array;
array = malloc(sizeof(char*)*(argc+1)); // plus one extra which will mark the end of the array

现在你有一个array[0..argc]/char*指针

那么对于每个参数,你需要为字符串

分配空间
int index;
for (index = 0; index < argc; ++index)
{
   arrray[index] = malloc( strlen(*argv)+1 ); // add one for the 
   strcpy(array[index], *argv);
   ++argv;
}
array[index] = NULL; /* end of array so later you can do while (array[i++]!=NULL) {...} */

With

char *array;

定义了一个char*类型的对象。也就是说:一个对象的值可以指向一个char(和下一个char,…),…)

你需要

char **array;

对于这个新类型,array的值指向char*,即另一个指针。您可以在char*中分配内存并保存该分配内存的地址,但char不能这样做。

相关内容

  • 没有找到相关文章

最新更新