将字符串数组复制到另一个字符串数组中 - C.

时间:2012-09-18 02:23:01

标签: c struct

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

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.

1 个答案:

答案 0 :(得分:3)

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

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);
}