2013-08-16 210 views
1

我有一个C代码,它可以在Solaris机器上正常工作,但是相同的代码有时会产生分段错误,并且在某些其他时间会产生不同的输出。为什么代码可以在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; 

当我打印的价值算它是Solaris15Linux768

请建议我在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

相关问题