Visual C ++ 6.0を使用していますが、以下のコードがあります。
char filename[1000], string[5];
FILE *fin;
strcpy(filename, argv[3]);
if ((fin = fopen(filename, "r")) != NULL)
{
fgets(string, 100, fin);
string[strlen(string)-1] = NULL;
printf("filename = %s\n", filename);
printf("argv[3]= %s\n", argv[3]);
printf("string = %s\n", string);
}
argv [3]はフルパスとファイル名です(例:C:\ Users \ Desktop \ file.txt)。ファイルの内容は次のとおりです。
1
2
3
したがって、「1」は「string」変数に格納する必要があります。
ただし、4回の実行のうち約1回は、出力が得られます。
filename = C:\Users\Desktop\file.tx
argv[3] = C:\Users\Desktop\file.txt
string = <very long garbage value>
なぜ
strcpy(filename, argv[3]);
文字列全体をコピーせず、最後の「t」が欠落していますか?そして、ファイルが存在するべきではなかったのに、なぜこの場合finがNULLではないのですか?
また、このコードはマルチスレッドプログラムに存在しますが、このコードを実行するのは1つのスレッドだけであることを追加する必要があります。