私は誤ってforループに隠された余分なprintf文を使って高価なシミュレーションを実行し、〜10KBのファイルの代わりに〜10GBのファイルを作成しました。私は私が修正しようとしているC.C:文字配列の索引付けとstrcmpの使用
との正式な訓練を持っていないにもかかわらず、問題を修正で亀裂を取ることにしましたので、シミュレーションを実行している再
は最良の選択肢ではありません(x、y、t、nはint型、int型、long double型、long double型)の行だけを出力するプログラムを作成することで、 。他の行は基本的に特定のパラメータを記述する文字列、数字、スペースの組み合わせですが、不必要な行はすべて「i」で始まります。
だから、私はここに、このコードの例に従うことを試してみようと思いました:Skip a line while reading a file in C
int main(int argc, char *argv[])
{
FILE *f;
if((f = fopen(argv[1], "r")) == NULL)
{
printf("Couldn't open file. \n");
return(0);
}
char buf[500];
while(fgets(buf, sizeof(buf), f) != NULL)
{
if(strcmp(&buf[0], "i") != 0)
{
printf("%s \n", buf);
}
}
}
だから、ライン
if(strcmp(&buf[0], "i") != 0)
が本当にでもいるかのように、動作しないようです行の最初の要素は "i"であり、まだ出力されている行のprintfです。私はif文の内側にこれを追加した場合興味深いことに:
printf("%c \n", buf[0]);
「i」はまだ私はif文を失敗する条件ことを確認しようとしていたにもかかわらず、印刷することができます。興味深いことに、ライン
printf("%s \n", &buf[0]);
はちょうど私が
if(strcmp(buf[0], "i") != 0)
として再書き込み
if(strcmp(&buf[0], "i") != 0)
しようとしましたが、ちょうどエラーを受け取った
printf("%s \n", buf);
と同じことを印刷します。
各行の最初の要素と選択した文字「i」を正しく比較するにはどうすればよいですか?
'buf [0]'は 'if(buf [0] == 'i')...と他の文字と比較できる文字です。 –
うわー、 –
'if(buf [0]!= 'i')... ' –