私はCS1クラスのプロジェクトに取り組んでいますが、これまで考えたことのない何かに遭遇しました。Cのすべての配列は、基本的に配列の最初の要素へのポインターであり、文字列は実際には単なる文字配列であることを私は知っています。ただし、私の割り当てでは、ファイルを読み込む必要があり、ファイルの一部は次のとおりです。
Brad Tim Rick(スペースで区切られたより多くの男性の名前) ルーシーアンジェラティナ(スペースで区切られたより多くの女性の名前)
これは短い例ですが、私がしなければならないのは、名前を抽出して、男性用と女性用の2つの別々の配列に格納することです。
私はこのようなものを使ったことがないので、もちろん混乱しています。これは私がやろうとしていることですが、もちろん機能していません...そうそう、動的割り当てにそれらを格納しようとしています。唯一の仕様では、名前は19文字を超えることはありません(文字列の最後の「/ 0」が何があっても存在できるようにするには、20文字と言う必要がありますか?)コンパイラに「ちょっと欲しい文字列の配列であり、各文字列は「文字列トレーラー'/ 0'」に対して19文字+1を保持できますか?それでは、ポインタを介してそれらにアクセスするにはどうすればよいですか?
char **mens_names, **womens_names;
mens_names = malloc(number_of_couples * sizeof(char[19]));
womens_names = malloc(number_of_couples * sizeof(char[19]));
if(mens_names == NULL){
printf("Malloc failed! Memory could not be allocated to variable mens_names.");
return -1;
}
int i;
for(i = 0; i < number_of_couples; i++){
fscanf(input_file, "%s", &mens_names[i]);
}
if(womens_names == NULL){
printf("Malloc failed! Memory could not be allocated to variable womens_names.");
return -1;
}
for(i = 0; i < number_of_couples; i++){
fscanf(input_file, "%s", &womens_names[i]);
}
for(i = 0; i < number_of_couples; i++){
printf("Man: %s ", mens_names[i]);
printf("Woman: %s\n", womens_names[i]);
}