c - 将局部静态数组传递给函数

标签 c arrays static

我正在尝试从函数 letter_remover 传递本地数组,该函数读取原始数组,删除元音字母 + h、w 和 y,然后将其复制到新数组中。然后将这个新数组传递给 main。

例如输入会变成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;
}

最佳答案

总的来说,你可能想说

for (i = 0; i < MAX; i++)
    {
    printf("%c", p[i]);
    p++;
    }

为了打印p中的每个字符。由于这将输出超过 0 个字符,更好的方法是简单地说 printf("%s", p);,而不是循环。或者只是 printf(p); 如果您信任该字符串!或者 puts(p); 显然也会打印换行符,这很可能是终端所需要的。

关于c - 将局部静态数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33171759/

相关文章:

c - 数组 typedef 结构在被函数调用时无法正常工作

c# - .NET 中静态变量的生命周期

c - C 中带有 break 或 continue 语句的 foreach 宏

c - 如何获取 wchar_t* 的最后 n 个字符

arrays - 将字符变化列导入 PSQL 中的字符变化数组列

Python:根据多个子集改变数组元素的值

Python:在类中创建抽象静态属性

java - 放入静态 map 时的非静态变量 this

宏可以用来模拟 C++ 模板函数吗?

c - 在 C 中将文件拆分为 n 个较小的文件