0

我有一个包含字符串数组(char **args)的结构。我需要能够将字符串数组 (char *input[32]) 复制到结构的该元素中。例如:

Thing s;
s.args = input; //assuming input already has some strings in it

当我尝试这样做时,下次调用 s.args = input 时,它会完全覆盖旧输入。如何以适当的方式实现此功能?

编辑

这就是结构的样子。

typedef struct{
char **args;
} Thing;

然后在我的函数中,我声明:

char *args[512];
.....
args[count] = string //string is a char *

最后,我想做:

s.args = input.
4

1 回答 1

5

你不是在复制它。您实际上只是在设置指针。实际上你有这个:

char **args;
char *other[32];
args = other;

您需要实际复制数组 - 为此您需要为其分配内存:

s.args = malloc( 32 * sizeof(char*) );

for( i = 0; i < 32; i++ ) s.args[i] = input[i];

那是一个浅拷贝——它会复制你的字符串指针,但不会复制它们。如果更改 中的字符串内容input,该更改将反映在 中s.args。要复制字符串,您必须这样做:

for( i = 0; i < 32; i++ ) s.args[i] = strdup(input[i]);

由于您已经分配了内存,因此在s.args再次覆盖之前(以及在程序完成时),您需要释放分配的内存。这包括字符串(如果您调用了strdup);

if( s.args != NULL ) {
    // Only do the loop if you did a deep copy.
    for( i = 0; i < 32; i++ ) free(s.args[i]);

    // Free the array itself
    free(s.args);
}
于 2012-09-18T02:27:20.993 回答