C语言问题,为什么显示答案错误?

题目描述
写一个函数,将一个字符串中的元音字母复制到另一个字符串中。在主函数中输入一个字符串,通过调用该函数,得到一个有该字符串中的元音字母组成的一个字符串,并输出。
输入
一个字符串(一行字符)。
输出
该字符串所有元音字母构成的字符串。行尾换行。
样例输入
CLanguage
样例输出
auae
提示:可以采用如下函数原型
void vowels(char s1[], char s2[]);

我的代码如下:

#include <stdio.h>

void vowels(char s1[], char s2[]){
int i,m;
m = 0;
for(i = 0; i < strlen(s1); i++){
if(s1[i] == 97 || s1[i] == 101 || s1[i] == 105 || s1[i] == 111 || s1[i] ==117){
s2[m] = s1[i];
m++;
}
}
s2[m+1] = '\0';
}

int main(){
char str1[10] ;
char str2[10] ;

scanf("%s", str1);
vowels(str1,str2);
printf("%s\n", str2);

return 0;
}

#include <stdio.h>
#include <string.h>
void fun(char s1[], char s2[]) {
    char *p = NULL;
    int i = 0, j = 0;
    int q = 0;
    p = s1;
    for (; i < strlen(s1); i++) {
        if (*p == 'a' || *p == 'A' || *p == 'e' || *p == 'E' || *p == 'i'
                || *p == 'I' || *p == 'o' || *p == 'O' || *p == 'u'
                || *p == 'U') {
            s2[j] = *p;
            j++;
        }
        p++;
    }
    for (q = 0; q < j; q++)
        printf("%c", s2[q]);
}
int main(void) {
    char s1[] = { "abecdefuuA" };
    char s2[10];
    fun(s1, s2);
    return 0;
}

温馨提示:答案为网友推荐,仅供参考