C语言 问题

char *fun ( char *s, char *t)
{
int i=0,j=0;
for(;*s!='\0';s++);
i++;
for(;*t!='\0';t++)
j++;
if(i<j)
return t;
else
return s; 这是我编的程序,怎么不对呢??
下面是答案
char *fun ( char *s, char *t)
{
int i,j;
for(i=0;s[i]!= '\0';i++);/*求字符串的长度*/
for(j=0;t[j]!= '\0';j++);
if(i<=j) /*比较两个字符串的长度*/
return t; /*函数返回较长的字符串,若两个字符串长度相等,则返回第1个字符串*/
else
return s; 这个返回值怎么不带*号呢?

for(;*s!='\0';s++);//此处多了个;号
i++;
for(;*t!='\0';t++)
j++;

要求的是if(i<=j)
而你的是if(i<j)

还有就是正确返回的是s和t的首地址,而你在运算是s和t都变化了,应该恢复原值
可以这样:
return s-i;
return t-j;

return s; 这个返回值怎么不带*号呢?
因为函数char *fun 要求返回值是char*,就是字符串指针,如果加*就是数值了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-25
如一楼所说
for(;*s!='\0';s++); //多个分号
i++;
for(;*t!='\0';t++)
j++;
if(i<j) => if(i<=j)

但这几个错误不是关键
关键在于你已经在for语句改变了s和t指针了,这时候s和t已经指向了原字符串的‘\0’
函数传回的指针也是指向'\0'

另 for语句
按你原来的写法可以化简成 for(;*s!='\0'; s++, i++) 虽然跟本题不符
正确的写法再简便可以是 for(;s[i++]!='\0';) 比答案的还简单点,只要别人能看得懂
第2个回答  2011-02-25
ILE *fpl)这个是C语言中函数库里提供的一个库函数。
三个参数的作用:
str,Storage location for data,即读出的数据存放的位置
n,Maximum number of characters to read,即要读取的字符的最大长度
fpl,Pointer to FILE structure,即指向文件的指针
执行这个函数,如果读取数据成功,返回一个string类型的指针str,其中存储了读出的数据;
如果读取数据失败,就返回一个NULL指针,表明读取失败。
所以if(fgets(str,sizeof(str),fpI)==NULL)这行代码就是判断读取是否成功,若不成功,则要执行if函数中的语句,即 执行printf("字符串读出失败");exit(0);若成功,则执行 puts(str);
fclose(fpI);
getchar();