2013-08-16 6 views
1

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 기계에 15Linux 기계 768입니다 수 :

다음

은 내가 두 시스템의 차이를 얻고 부분이다.

Linux 컴퓨터의 코드에서 변경해야 할 사항을 제안하십시오.

+0

Solaris 컴퓨터는 어떤 엔디안입니까? –

+1

'fopen()'의 반환 값을 캐스팅 할 필요가 없습니다. 그렇게하지 마십시오. 또한 결과에 의존하기 전에 모든 I/O 호출이 성공했는지 확인해야합니다. – unwind

+1

읽기 용으로 열린 파일은 파일의 시작 부분에 위치합니다. 'fseek()'는 중복되어 있습니다 만, 중복되므로 문제가되지 않습니다. 나는 오류 검사가 없어도 fopen() (특히)에 문제가 없다고 가정합니다. –

답변

2

필자는 엔디안이 아니라고 생각합니다. 15 = 0x000F. 768 = 0x0300. char의 크기와 관련이있을 수 있습니다. 두 시스템 모두에서 CHAR_BIT를 인쇄하여 얻은 결과를 확인하십시오.

+1

'sizeof (char)'플랫폼이 무엇이든 표준 및 설계별로 항상 '1'입니다. – jlliagre

+0

그냥 편집하려고했습니다. – AlexDev

+0

@ Kalyan Urimi 시도해 보셨습니까? 이 작업을 수행하려면 제한 헤더를 추가해야합니다. – AlexDev

관련 문제