2012-04-17 12 views
0

まだCでのバイリンガル段階です。私がここで間違っていることはよく分かりませんが、私はそれはポインタと関係していると思います。とにかく。私は読み込んで、タブ区切りのテキストファイルを2次元配列に解析しようとしています。実際の配列は6109 x 14です。より大きなポインタ配列を割り当てました。テキストで区切られたファイルCで読む

50行目の下に印刷された行Iは、テキストファイルの最後の行を印刷します。私は50の代わりに異なる数字でこれを試しましたが、それらはすべて同じものを印刷します。

EDIT:afileは次のようになります。

instance_id batch_id cmap_name INN1 concentration (M) duration (h) cell2 array3 perturbation_scan_id vehicle_scan_id4 scanner vehicle vendor catalog_number catalog_name 
1 1 metformin INN 0.00001 6 MCF7 HG-U133A EC2003090503AA EC2003090502AA HP GeneArray Scanner medium Sigma-Aldrich D5035 "1,1-dimethylbiguanide hydrochloride" 
2 1 metformin INN 0.00001 6 MCF7 HG-U133A EC2003090504AA EC2003090502AA HP GeneArray Scanner medium Sigma-Aldrich D5035 "1,1-dimethylbiguanide hydrochloride" 
3 1 metformin INN 0.0000001 6 MCF7 HG-U133A EC2003090505AA EC2003090502AA HP GeneArray Scanner medium Sigma-Aldrich D5035 "1,1-dimethylbiguanide hydrochloride" 
4 1 metformin INN 0.001 6 MCF7 HG-U133A EC2003090506AA EC2003090502AA HP GeneArray Scanner medium Sigma-Aldrich D5035 "1,1-dimethylbiguanide hydrochloride" 
21 2 phenformin INN 0.00001 6 MCF7 HG-U133A EC2003091104AA EC2003091102AA HP GeneArray Scanner medium Sigma-Aldrich P7045 phenformin hydrochloride 
22 2 phenyl biguanide  0.00001 6 MCF7 HG-U133A EC2003091105AA EC2003091102AA HP GeneArray Scanner medium Sigma-Aldrich P19906 1-phenylbiguanide hydrochloride 
23 2 valproic acid INN 0.001 6 MCF7 HG-U133A EC2003091106AA EC2003091102AA HP GeneArray Scanner medium Sigma-Aldrich P4543 2-propylpentanoic acid 
61 2a metformin INN 0.00001 6 MCF7 HG-U133A EC2003091103AA EC2003091102AA HP GeneArray Scanner medium Sigma-Aldrich D5035 "1,1-dimethylbiguanide hydrochloride" 
+0

"afile"の最初の数行を表示できますか? –

+0

私は試してみました。どのように書式をどのように書かれているかのように、それらの新しい行の全てが実際には新しい行ではないように、私はそれを修正することができます。 – JoshDG

+1

strtokは、取り込まれたポインタを返します。意味のないトークンのコピー。 – BLUEPIXY

答えて

1

lineを想像してみてはあなたが手紙の束を置くことができる大きな箱です。
これはあなたがfgets()で行うことです。

次に、そのボックス内の特定の文字をポイントします。

次に、ボックスの内容を置き換えます(別のfgets()を同じ変数lineに置き換えます)。もちろん、ポインタは同じボックスを指していますが、今度は新しい文字を指します。

あなたのループのどこかに文字(strcpy()が十分なスペースがあることを確認してください)をコピーする必要があります。

+1

さらに明示的に言うと、 'strtok()'は何にも新しいスペースを割り当てません。内部状態の一部にポインタを渡すだけです。したがって、それが返すものはそのまま使用することは危険です。あなたはそれが返すものをあなたがコントロールするメモリにコピーする必要があります。 – QuantumMechanic

+0

ああ、私は参照してください。私はそれがポインタと関係していたことを知っていた!ありがとう! – JoshDG

+0

result [x] [y] = curResultと言う私の行の代わりに、strcpy(result [x] [y]、curResult)で置き換えようとしました。しかし、私はbad_accessエラーが発生しました。 – JoshDG

関連する問題