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と実践的なメモリ管理に非常に慣れていないので、助けていただければ幸いです。