Solaris
기계에서 잘 작동하는 C
코드가 있지만 동일한 코드가 때로는 세그먼트 화 오류를 발생시키고 다른 출력은 다른 출력을 생성합니다.Solaris에서 코드가 작동하지만 Linux에서 작동하지 않는 이유는 무엇입니까?
FILE *inf;
unsigned char *ptr;
unsigned short *ds;
int n, s;
char work[100];
inf = (FILE *) fopen("Filename", "r");
s = fseek(inf, 0, SEEK_SET);
n = fread(work, 1, sizeof(work), inf);
ptr = (unsigned char *)work;
ptr += 8;
count = 0;
ds = (unsigned short *) ptr;
count = *ds;
내가 값을 인쇄하고는 Solaris
기계에 15
및 Linux
기계 768
입니다 수 :
다음
은 내가 두 시스템의 차이를 얻고 부분이다.Linux 컴퓨터의 코드에서 변경해야 할 사항을 제안하십시오.
Solaris 컴퓨터는 어떤 엔디안입니까? –
'fopen()'의 반환 값을 캐스팅 할 필요가 없습니다. 그렇게하지 마십시오. 또한 결과에 의존하기 전에 모든 I/O 호출이 성공했는지 확인해야합니다. – unwind
읽기 용으로 열린 파일은 파일의 시작 부분에 위치합니다. 'fseek()'는 중복되어 있습니다 만, 중복되므로 문제가되지 않습니다. 나는 오류 검사가 없어도 fopen() (특히)에 문제가 없다고 가정합니다. –