指针返回,读取不到内容

#include
#include
char *snum(char *ps,char *str2)
{
    int i,n,m,j;
    n=strlen(ps);
    m=strlen(str2);
    char *NewBuff;
    for ( j = 0; j < m; j++)
        for ( i = 0; i < n; i++) 
            if (*(str2+j)==*(ps+i))
            NewBuff=*ps+i;
   return (NewBuff);
}
int main()
{ 
    int i,k;
    char *pt;
    char *ps = "abcdef"; 
    char *str2 = "aeiou";
    char *snum(char *ps,char *str2);
    pt=snum(ps,str2); 
    k=strlen(pt);
    for ( i = 0; i printf("%d %c ",i,*(pt+i));
    }
    
}

请教各位,为什么新指针指向只有一个指针内容。

因为 char *snum(char *ps,char *str2) 函数里的写法,返回的值是两个字符串中最后一个相同的字符,在这段代码里:char *ps = "abcdef"; char *str2 = "aeiou"; 先找到字符 'a' ,将 NewBuff= ps+i; 赋值,然后继续循环,再找到了 ‘e', NewBuff= ps+i; ,NewBuff再次赋值,覆盖了第一次赋值,最终 NewBuff指向了字符串ps 里的 e , 然后回到主函数 pt=snum(ps,str2); , 此时pt 指向“ef\0” ,所以最后的输出:0 e 1 f 。 代码里这句:NewBuff=*ps+i; ,是错误的,ps 前面没有‘*’ 号,应改为:NewBuff = ps+i;

NewBuff=ps+i;