我有一个包含字符串数组的结构(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.
答案 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);
}