我有一个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;
当我打印的价值算它是Solaris
机15
和Linux
机768
。
请建议我在Linux机器上的代码中进行更改。
Solaris机器是什么排序? –
不需要使用'fopen()'的返回值,不要这样做。另外,您当然应该在依赖结果之前检查所有I/O调用是否成功。 – unwind
为读取打开的文件位于文件的开头。 'fseek()'是多余的 - 但是如此多余,它不是你问题的一个因素。我假设尽管没有错误检查,但fopen()(特别是)失败并没有问题。 –