Я пытаюсь передать локальный массив из функции 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 создает новый массив как статический полукокса [] массив и возвращает символ *
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;
}
Что такое «местное arrray»? – MikeCAT
Что такое содержимое 'array_filler' и' letter_remover'? – dbush
@MikeCAT Это уже статический массив –