関数fgetposの動作確認をしようとしているのですが、
下記構文をVisualStudioで実行すると一応コンパイル・実行は
出来るのですが、仕様がよくわかりません。
fgetposの目的は何でしょうか?
また、LINUXでコンパイルすると、
fgetpos.c:22:5: error: aggregate value used where an integer was expected
22 | printf("file position indicator: %ld\n", (long)pos_first);
| ^~~~~~
fgetpos.c:29:5: error: aggregate value used where an integer was expected
29 | printf("file position indicator: %ld\n", (long)pos_writed);
| ^~~~~~
fgetpos.c:33:9: error: aggregate value used where an integer was expected
33 | printf("元に戻した file position indicator: %ld\n", (long)pos_first);
というエラーメッセージが出力されます。
これはどのようにすれば消えるでしょうか?
【構文】
/* header files */ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> /* main */ int main(void) { FILE *fp; fpos_t pos_first, pos_writed; char *filename = "fgetpos.c"; /* ファイルのオープン */ if ((fp = fopen(filename, "w+")) == NULL) { fprintf(stderr, "%sのオープンに失敗: %s\n", filename, strerror(errno)); return EXIT_FAILURE; } /* file position indicator の値を取得 */ fgetpos(fp, &pos_first); printf("file position indicator: %ld\n", (long)pos_first); /* ファイルに Snoopy を書き込む */ fputs("Snoopy",fp); /* Snoopy 書込み後の file position indicator の値を取得 */ fgetpos(fp, &pos_writed); printf("file position indicator: %ld\n", (long)pos_writed); /* file position indicator の値を元に戻す */ if (fsetpos(fp, &pos_first) == 0) { printf("元に戻した file position indicator: %ld\n", (long)pos_first); } else { fprintf(stderr, "file position indicator の設定に失敗.\n"); return EXIT_FAILURE; } fclose(fp); return EXIT_SUCCESS; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/04 02:11
2020/08/04 02:13
2020/08/04 02:22