私は何か困ったことを理解する助けをすることができます。これは、ファイルを読み出すためのfopen()の位置に関係します。コード(GCC 4.5.2でコンパイルされたC)後なぜfopenが使用されるかは重要ですか?
:
int main (int argc, char** argv) {
FILE * pFile;
try_fopen(pFile, argv[1], "r"); // Gives a Segfault
printf ("The file contains %d ones.\n", cnt_ones(pFile));
fclose (pFile);
return 0;
}
主にそれを入れている間:
#include <stdlib.h>
#include <stdio.h>
void try_fopen(FILE* f_handle, const char* f_name, const char* mode) {
f_handle = fopen(f_name, mode);
if(f_handle == NULL) {
fprintf(stderr, "Error: Unable to open '%s'.", f_name);
exit(EXIT_FAILURE);
}
}
int cnt_ones(FILE* pFile) {
int c;
int n = 0;
do {
c = fgetc (pFile);
if (c == '1') n++;
} while (c != EOF);
return n;
}
なぜ、それが機能にはfopenを置くこととSegfaultを与えることです(もしそうでない場合):
int main (int argc, char** argv) {
FILE * pFile;
pFile = fopen(argv[1], "r"); // While this doesn't give a Segfault
if(pFile == NULL) {
fprintf(stderr, "Error: Unable to open '%s'.", argv[1]);
exit(EXIT_FAILURE);
}
printf ("The file contains %d sign characters.\n", cnt_ones(pFile));
fclose (pFile);
return 0;
}
?ポインタを返すか、ダブルポインタを使用します。 – janneb
私は今、私の方法の誤りを見る。 –