テキスト ファイルから読み取り、特定の単語 (より具体的には「CH3」などの種名) を検索し、その下にリストされているデータを読み取るコードがあります。main で宣言されているファイル名と種名を含む文字列の配列でvoid read_data(char *fargs[], double *data)
ある関数を宣言します。fargs
次に、strstr
(「CH3ONO2」ではなく「CH3」など) を使用して正しい種名を見つけていることを確認するために、種名の両側にスペースを入れる短いループを作成しました。
char *spec;
int x;
spec[0] = ' ';
while (fargs[1][x]) {
spec[x+1] = fargs[1][x];
x++;
}
spec[x+1] = ' ';
spec[x+2] = '\0';
したがって、問題は、これを行うと、プログラムが後でセグメンテーション違反を発生させることです(strstrの場合ではなく、ループの有無にかかわらず正常に動作します)。このループを含めずにすべての操作を実行するとfargs[1]
、プログラムは機能しますが、上記の仮説のように間違った種名が見つかることがあります。ループを含めただけで、二度と使用しない場合spec
でも機能しません。これはfargs[1]
、ループ内で何らかの変更を加えていることを示唆しています。また、後で使用することを明確にするためstrcmp
にfargs[1]
、宣言にスペースを含めただけでも、操作する必要がありますfargs[1]
同様の方法でスペースを削除します。より多くのコード、プログラム出力、読んでいるテキストファイルの例などを完全に投稿できます。それが役立つ場合は、巨大なコードの壁を投稿したくありませんでした。それ。