【发布时间】:2015-10-16 13:29:09
【问题描述】:
我正在尝试从函数letter_remover 传递一个本地数组,该函数读取一个原始数组,删除元音 + h、w 和 y,然后将其复制到一个新数组中。然后将这个新数组传递给 main。
例如,输入 plutonium 将变为 pltnm。但是,当我在 main 中调用该函数并打印出新数组时,它会重复一些字母,例如打印plltnm。
void array_filler (char a[]);
char * letter_remover (char b[]);
int main (void)
{
char name[MAX];
char *p;
int i;
array_filler(name);
p = letter_remover(name);
printf("Local array passed back: ");
for (i = 0; i < MAX; i++)
{
printf("%s", p);
p++;
}
return 0;
}
如果我打印在函数letter_remover 中创建的新数组,它会正确打印。 letter_remover 函数将新数组创建为静态 char[] 数组并返回 char *
array_filler 包含:
void array_filler (char a[])
{
printf("Type name: ");
int i = 0, c;
while ((c = getchar()) != '\n')
{
c = tolower(c);
if (isalpha(c))
{
a[i] = c;
i++;
}
}
a[i] = '\0';
printf("Name inside array: %s\n", a);
}
letter_remover 包含:
char * letter_remover (char b[])
{
int i;
static char c[MAX];
char a[] = "aeiouywh";
printf("Name without forbidden characters: ");
for (i = 0; b[i] != '\0'; i++)
{
if (!strchr(a, b[i]))
{
c[i] = b[i];
printf("%c", c[i]);
}
}
c[i] = '\0';
printf("\n");
return c;
}
【问题讨论】:
-
什么是“本地数组”?
-
array_filler和letter_remover的内容是什么? -
@MikeCAT 已经是静态数组了
-
@dbush 我现在已经添加了他们的内容。
-
main函数中的for循环看起来很奇怪。为什么不只打印一次p?