ピュアCコード:
あなたはそれは大きなサイズの一時文字列に文字列をスキャンし、以降の文字列を複製するのが最善です1 によって各文字列1を割り当て、その後、最初の配列の配列を割り当てる必要があります。それは(確か、またはC99ではない)C準拠したのではなくC++に準拠していないので、私はfor (i
にfor (int i
を変更した
int i,nb_names = 10;
char **firstName = malloc(sizeof *firstName * nb_names);
char **lastName = malloc(sizeof *lastName *nb_names);
char tempn[1000],templ[1000];
for(i = 0; i<nb_names; i++){
fscanf(fp,"%s %s", tempn,templ);
firstName[i] = strdup(tempn);
lastName[i] = strdup(templ);
}
注意。 C++の場合、mallocsを削除し、std::vector
とstd:string
を代わりに使用してください。
できればC++を使用することをお勧めします。私は、2D配列を適切に割り当てることを試みている(そして失敗している)人のC/C++に関する多くの質問に答えました。 C++のライブラリコードを使用するC++ははるかに明確です。 CまたはC++:
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int main()
{
int nb_names = 10;
vector<string > firstName(nb_names);
vector<string > lastName(nb_names);
for(int i = 0; i<nb_names; i++){
cin >> firstName[i];
cin >> lastName[i];
}
return 0;
}
1つの言語を選んで標準入力からの読み取りフルC++例
、。 – chux
デバッグヘルプ(「なぜこのコードは動作しませんか?」)には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:最小、完全、および検証可能な例を作成する方法。 – Olaf
Cのように見えますが、実際にはC++ならfstreamの使用を検討してください – alexeykuzmin0