前提・実現したいこと
パスワード変更プログラムです。macのターミナル上では正常に動くプログラムがWindowsのvscode上では以下のエラーになります。 fpos_t=8 のところで「型が違う」と出るらしいのですが、他に改善法がわかりません。
発生している問題・エラーメッセージ
incompatible types when assigning to type ‘fpos_t {aka struct <anonymous>}’ from type ‘int’
該当のソースコード
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> int main(){ int32_t kanrisyaID; char filename[]="database.txt"; FILE *fp; fpos_t fpos; char pass[9]; char current_ps[9]; char new_ps[9]; fp = fopen(filename,"r+"); if(fp == NULL){ puts("データベースへのアクセスに失敗しました。管理者にご連絡ください"); return -1; } fscanf(fp,"%d",&kanrisyaID); fscanf(fp,"%s",pass); while(1){ printf("現在のパスワードを入力してください>"); scanf("%s",current_ps); if(strcmp(pass,current_ps)==0){ break; } else{ printf("パスワードが違います。\n"); } } while(1){ printf("新しいパスワードを入力してください>(半角英数字8文字)"); scanf("%s",new_ps); if(strlen(new_ps)==8){ break; } else{ printf("もう一度入力をお願いします。\n"); } } printf("新しいパスワードは%sとなりました。\n",new_ps); strcpy(current_ps,new_ps); fpos = 8; fsetpos(fp,&fpos); fprintf(fp,"\t%s",new_ps); fclose(fp); return 0; }
試したこと
ubuntuでの実行(同じく失敗)
'8'という具体的な値からstrlen(8文字の文字列)に変更(意味なし)
補足情報(FW/ツールのバージョンなど)
初心者のため、できれば改善案が欲しいです。
fsetpos(fp,&fpos);は何のためにしているのですか?
返信ありがとうございます。ここに記述し忘れてしまったのですが、変更したパスワードをテキストファイルに書きこむのですが、そのテキストファイルは
8桁のID(文字列) 8文字のパスワード(文字列)
としているため、パスワードの上書きのため8文字分ずらす処理をしています。