有关字符指针函数的问题
我最近正在狂做c笔试题,有一部分做错的题,特地摘录出来,请高手们答疑解惑,谢谢啦!1、阅读以下函数
fun(char *s1,char *s2)
{
int i=0;
while(s1[i]==s2[i]&&s2[i]!='\0'))i++;
return(s1[i]=='\0'&&s2[i]!='\0'));
}
此函数的功能是比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0。
比较s1和s2所指字符串是否相等这句话我理解了,它对应的是while(s1[i]==s2[i]&&s2[i]!='\0'))i++;这条语句,但后半句:若相等,函数值为1,否则函数值为0。我没想明白。若相等,函数值为1,则s1[i]=='\0',s2[i]!='\0'这两个条件都得成立,我认为若s1[i]=='\0',s2[i]!='\0',则两个字符串不等,那么与若相等,函数值为1这个说法矛盾。实在有点糊涂,请高手指点,谢谢!
2、文件类型题
(1)#include<stdio.h>
void main()
{
FILE *fp;
int i,k=0,n=0;
fp=fopen("d1.dat", "w");
for(i=1;i<4;i++) fprintf(fp,"%d",i);
fclose(fp);
fp=fopen("d1.dat", "r");
fscanf(fp,"%d%d",&k,&n);printf("%d %d\n",k,n);
fclose(fp);
}
执行后输出结果是?答案给的是123 0
我分析的是开始以只写方式打开文件d1.dat,然后写入1,2,3这3个数据至文件d1.dat中。而后以只读方式打开文件,用fscanf函数将d1.dat的数据读给k和n,我想不明白的是为什么k不是12或者1,而n为什么是0?
(2))#include<stdio.h>
void main()
{
FILE *fp;
int i,a[4]={1,2,3,4},b;
fp=fopen("data.dat", "wb");
for(i=0;i<4;i++) fwrite(&a[i],sizeof(int),1,fp);
fclose(fp);
fp=fopen("data.dat", "rb");
fseek(fp,-2L*sizeof(int),SEEKEND);
fread(&b,sizeof(int),1,fp);
fclose(fp);
printf("%d\n",b);
}
执行后输出结果是?
答案给的是3。
我分析的是通过fwrite函数写入a数组中4个元素1,2,3,4。而后fseek函数从文件末尾处向前移2个整数字节,而后fread函数从文件中读取1个整形数据到变量b中,既然前移2个整数字节,不就是从4移到2么?为什么是3,请问我哪里分析错了?请指点,谢谢!