프로그램을 읽을 때 비트 맵을보고 있습니다. 문제는 내가 메인에 모든 것을 썼고 코드를 함수에 퍼뜨릴 필요가 있다는 것이다. 나는 표준 구조를 사용하여 fread를 사용하여 정보를 읽고있다. 그러나 나는 어떻게 든 함수를 떠난 후에 정보에 접근 할 수 없다. 그래서 포인터를 통해 구조를 시도했지만 fread는 그렇게 할 수 없습니다. 난 그 fread 포인터를 통해 할 수 있도록 설계되지 않은 읽었습니다. 그러나 나는 그것을 확인할 수 없다. 그리고 그것은 내 질문이다. 포인터를 통해 어떻게합니까? 그리고 왜 내 첫 시도가 기능 밖에서 작동하지 않습니까?함수 내의 구조체에 대한 포인터와 포인터
void odczyt_pliku_bmp(struct FileHeader fheader, struct MapHeader mheader, char *nazwa) {
FILE *fp1;
fp1 =fopen(nazwa,"rb");
if(fp1)
{
fread(&fheader.sygnatura,2,1,fp1);
//...
printf("%d\n",fheader.sygnatura);//Checking. Everything seems right there
}
else
{
printf("Error");
}
fclose(fp1);
}
그리고 주 :
int main() {
struct FileHeader fheader;
struct MapHeader mheader;
char nazwapliku, *wczyt_nazwa =&nazwapliku;
printf("Podaj nazwe pliku bitmapy: ");
scanf("%s",wczyt_nazwa);
odczyt_pliku_bmp(fheader, mheader, wczyt_nazwa);
printf("%d\n",fheader.sygnatura);// And there is random trash
return 0;
}
또 다른 포인터 사용해보십시오 :
void odczyt_pliku_bmp(struct FileHeader *fheader, struct MapHeader *mheader, char *nazwa) {
FILE *fp1;
fp1 =fopen(nazwa,"rb");
if(fp1)
{
fread(fheader->sygnatura,2,1,fp1);
//...
printf("%d\n",fheader->sygnatura);
}
else
{
printf("Error");
}
fclose(fp1);
}
초 방법 다시 주요 :
int main() {
struct FileHeader fheader;
struct MapHeader mheader;
char nazwapliku, *wczyt_nazwa =&nazwapliku;
printf("Podaj nazwe pliku bitmapy: ");
scanf("%s",wczyt_nazwa);
odczyt_pliku_bmp(&fheader, &mheader, wczyt_nazwa);
printf("%d\n",fheader.sygnatura);
return 0;
}
폴란드어를 코드로 사용하지 않으면 도움이 될 것입니다. – Everettss
'fread'는 주어진 스트림에서 배열로 데이터를 읽습니다. 그러나 코드에서 'fread'에 대한 첫 번째 인수는 구조체입니다. 패딩 문제로 인해 문제가 발생합니다. 보다 나은 접근법은 파일 헤더를'unsigned char'의 배열로 읽는 것입니다. – mw215
[this] (http://stackoverflow.com/questions/37779302/fread-into-struct-reads-data-incorrectly/37780151)에서 도움이 될 수 있습니다. – mw215