昨日の夕方からatoi関数のこの問題に苦労していますが、逃げられません。私は次の 2 つの機能を持つプログラムを作成しました。OS が更新されてからの日数。2-番号を見つけます。ウイルス対策が更新されてからの日数。多くのループの後、mm/dd/yy 形式の 2 つの日付を見つけ、ファイルに書き込みました。現在、ウイルス対策の日付 (16 進値を 10 進値に変換した後に取得したもの) のみに取り組んでおり、それを新しいファイルに保存しています。たとえば、日付を 07/17/2013 とします。この日付だけがファイルに書き込まれます。ファイル内の 16 進データ (16 進ワークショップでファイルを開いた後) は次のとおりです。
HEX VALUE --------------------------DECIMAL VALUE
37 2F 31 37 2F 32 30 31 33 0D 0A --- 7/17/2013..
ここで、3 つのループを実行して、別々の char 変数で 7、17、2013 を取得します。しかし、atoi を使用してこれらを 10 進数に変換すると、7 と 17 は 0 になりますが、2013 は 2013 のままです。90% のプロジェクトの残りを完了し、この最後の部分で立ち往生しました。プログラム全体をドメイン マシンに実装する必要があるため、ファイルの文字エンコーディングを変更できません。また、UTF を操作する方法が見つかりません。個々の日、月、年を整数値に変換した後、日付のtoatl値を見つけて現在の日付と比較し、違いを見つける必要があります。だから、plzはいくつかの解決策を提供します。
int main(void)
{
FILE *fp_av_dt;
int ch_av,n=0,n1=0,n2=0,i=0,iday1=0,imon1=0,iyr1=0;
int mon_val1=0,arr_days_values_av=0;
char dt_av[11],amon1[3],aday1[3],ayr1[5];
fp_av_dt=fopen("c:\\windows\\web\\wallpaper\\av_dt.txt","r");
while((ch_av=fgetc(fp_av_dt))!='\n')
{
if(isalnum(ch_av) | ch_av=='/' | ch_av=='\n')
/* leave any other char other than '/','\n' or any digit */
{
dt_av[n]=ch_av;
//printf("%c",dt_av[n]);
//store chars in dt_av array
n++;
}
}
printf("\n");
for(n=0;dt_av[n]!='/';n++) /* Loop & wait till '/' comes */
{
amon1[i]=dt_av[n]; /* store elements in month's array */
//printf("%c",amon1[i]);
i++;
}
i=0;
for(n1=(n+1);dt_av[n1]!='/';n1++) /*Loop & wait till next '/' comes */
{
aday1[i]=dt_av[n1]; store elements in day's array */
//printf("%c",aday1[i]);
i++;
}
i=0;
for(n2=(n1+1);dt_av[n2]!='\n';n2++)
{
ayr1[i]=dt_av[n2]; store elements in year's array */
//printf("%c",ayr1[i]);
i++;
}
i=0;
iday1=atoi(aday1); /* convert array to integer */
printf("%d\n",iday1);
imon1=atoi(amon1);
printf("%d\n",imon1);
iyr1=atoi(ayr1);
printf("%d\n",iyr1);
system("PAUSE");
} /* Uncomment printf lines to see the value of any variable */
ここで就寝時間です。10時間後にオンラインになります。ありがとう...