我知道有很多关于在 C 中创建动态数组的问题,但它们并没有真正帮助我,所以让我以不同的方式提问。
我的程序需要读取可变数量的命令行参数,每个参数的长度都是可变的。此函数接受传递给 main 的 argv 数组,并应返回一个 char* 数组,其中仅包含那些作为环境设置的参数。(程序需要复制 UNIX env 命令。)这是我现在拥有的:
char** getEnvVariables(char* args[], int start) {
int i = start;
char** env_vars = (char **) malloc(1);
while (args[i]) {
printf("size of env_vars: %d\n", sizeof(env_vars));
if (isEnvironmentSetting(args[i])) {
printf("arg: %s\n", args[i]);
printf("size of arg: %d\n", sizeof(args[i]));
printf("new size of env_vars: %d\n", (sizeof(env_vars) + sizeof(args[i])));
env_vars = realloc(env_vars, (sizeof(env_vars) + sizeof(args[i])));
memcpy(env_vars, args[i], sizeof(args[i]));
i++;
}
else
break;
}
return env_vars;
}
我的想法是使用 malloc() 创建数组,然后使用 realloc() 分配每个 char* 和 memcpy() 所需的空间,以将新的 char* 添加到数组中。但阵列实际上并没有增长。在循环的每次迭代中,它的大小为 8 个字节。我对 C 和动手内存管理仍然很陌生,因此不胜感激。