C プログラムでより効率的なコードを書こうとしていますが、ポインターと代入を正しくするための助けが必要です。以下に 2 つのメソッドを示しました。それぞれ次の宣言と strncpy を使用しています。
int kk, arraysize;
char person_name[100] = "";
char * array_person_name, * array_param;
...
strncpy(person_name, "John Smith", 100);
arraysize = <this value is downloaded from database>;
...
方法 A (長方形配列):
array_person_name = malloc( sizeof(char) * arraysize *100 );
array_param = malloc( sizeof(char) * arraysize * 2 );
for (kk = 0; kk < arraysize; kk++) {
strncpy(array_person_name[kk], person_name, 100);
strncpy(array_param[kk], "bt", 2);
}
方法 B (不規則配列):
for (kk = 0; kk < arraysize; kk++) {
array_person_name[kk] = &person_name;
array_param[kk] = "bt";
}
作成しようとしている配列は、配列の各要素に同じ値を配置していることに注意してください。メソッド A は要素の (四角形の) 配列でありarraysize
、各要素自体は 100 文字の配列です。arraysize
方法 Bは、各要素が char へのポインターである要素 の (不規則な) 配列を作成することによって、ストレージ スペースを無駄にしないようにします。
質問 1: 方法 A でメモリ (malloc など) を正しく割り当てていますか?
質問 2: 方法 B の構文は正しいですか?
質問 3: メソッド B で配列にメモリを割り当てるにはどうすればよいですか?
質問 4: 方法 B が一般的に好まれるというのは正しいですか?