C言語でメモリの動的確保を勉強しています。
一旦以下のようなソースを作成しました。
コンパイラはMinGWを使っています。
c
1#include <stdio.h> 2#include <stdlib.h> 3int main () { 4 5 //C言語で文字列を表示 6 char *string = "abcdief"; 7 8 9 // 読み込むファイルパス 10 char *path = "./test.txt"; 11 // 読み込んだ文字列を格納する文字ポインタ 12 char *defaultPointer = NULL; 13 // メモリ領域を確保するポインタ 14 char *temporaryPointer = NULL; 15 // コンパイル時に確保するメモリ領域 16 int getMemorySize = 10; 17 int c; 18 19/* 20 defaultPointer = (char *)malloc(getMemorySize * sizeof(int)); 21 temporaryPointer = (char *)realloc(defaultPointer, getMemorySize * sizeof(int)); 22 defaultPointer = temporaryPointer; 23*/ 24 FILE *fp; 25 fp = fopen(path, "r"); 26 if (fp == NULL) { 27 exit(2); 28 } 29 int i = 0; 30 while (1) { 31 c = fgetc(fp); 32 if (c != EOF) { 33 i = i + 1; 34 } else if (c == EOF) { 35 break; 36 } 37 } 38 39 /* 40 while(true) { 41 if (fgets(defaultPointer, 1 * sizeof(int), fp) != NULL) { 42 i = i + 1; 43 } else { 44 break; 45 } 46 } 47 */ 48 printf("%d", i); 49 fp = fopen(path, "r"); 50 temporaryPointer = (char *)realloc(defaultPointer, i * sizeof(int)); 51 if (temporaryPointer == NULL) { 52 printf("メモリが確保できませんでした。"); 53 } 54 defaultPointer = temporaryPointer; 55 56 fread(defaultPointer,1, sizeof(char)* i, fp); 57// fgets(defaultPointer, i * sizeof(int) + sizeof(int), fp); 58 printf("%s", defaultPointer); 59 free(defaultPointer); 60 free(temporaryPointer); 61 return 0; 62} 63 64
上記のようなファイルをindex.cとし
そのまま同じ内容をファイル名を変更し,test.txtとしました。
上記をコンパイルし実行したところ無事にファイルの中身を全て出力することができましたが
何故か
c
1 2 fread(defaultPointer,1, sizeof(char)* i, fp); 3
上記の箇所を
c
1 2 fread(defaultPointer, sizeof(char)* i, 1, fp); 3
上記のように第二引数と第三引数の順序を変更しても問題なく読み込めてしまいました。
これは引数の順序は問わないということなのでしょうか?
ご教授のほどよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。