C语言指针不太会,求指点!

2025-05-23 20:44:17
推荐回答(3个)
回答1:

几个错误:
1、主函数调用方法不对:
*p=*locatesubstr(str1,str2); ===》 p=locatesubstr(str1,str2);
2、locatesubstr逻辑不对,你的写法相当于找到1个字符相等就直接返回了,而没有比较str2的第2个第3个.。。后续的字符是不是也相等,改写如下:
 
/*查找子串 输入两个字符串,s1,s2;查找s2指向的字符串在s1指向的字符串中首次出现的位置,
返回指向该位置的指针。若s2指向的字符串不包含在s1指向的字符串中,则返回空指针NULL*/
char *locatesubstr(const char *s1, const char *s2)
{
int n;
if (*s2)
{
while (*s1)
{
for (n=0; *(s1 + n) == *(s2 + n); n++)
{
if (!*(s2 + n + 1))
return (char *)s1;
}
s1++;
}
return NULL;
}
else return (char *)s1;
}
3、最后,在输出部分,
if(p!=NULL)
{
while(*str1!='\0') ===》需修改,因为str1在循环中不变,改为 while(*p !='\0')
{
printf("%c",*p++);

回答2:

str1++;错了。
while(*str1!='\0')
{
printf("%c",*p++);
}
输入匹配之后str1剩余的内容?
k=1及if(k==0)没起作用,因为有匹配就直接return(str1);了不会执行下面的代码。
为什么返回str1数组的头地址啊,你的题目不是要返回指向匹配的位置吗?
你的思路有点问题,你再想想

回答3:

char *locatesubstr(char *str1,char*str2)
{
int k=0;
while(str1[k]!='\0')
{
if(str1[k]==str2[k])
return(str1+k);
k++;
}
return(NULL);
}

你试试,看行不行