我想写一个程序,删除字符串中的元音。到目前为止这是我的代码:

#include <stdio.h>
#include <string.h>

void f (char s[100])
{
    int ok=0;
    for (int i=0; i<strlen(s); i++)
    {
        if ((s[i]=='a')||(s[i]=='e')||(s[i]=='i')||(s[i]=='o')||(s[i]=='u'))
        {
            ok++;
            strcpy (s+i,s+i+1);
        }
    }
    printf ("%s",s);
}

int main ()
{
    f("alina");
    return 0;
}

当我编译它时,我的程序停止工作。当我调试它时也会发生同样的情况:当我到达strcpy (s+i,s+i+1);行时,我会收到一条错误消息:“program has stopped working”。我做错什么了吗?我错过什么了吗?

最佳答案

问题是,你打电话来

f("alina");

带有字符串文本("alina"),该文本通常存在于只读内存中且不可修改。任何修改字符串文本的尝试都将导致未定义的行为。
相反,你可以做一些
int main (void)
{
    char arr[] = "alina";

    f(arr);
    return 0;
}

哪一个
定义一个名为arr
使用值"alina"初始化数组
将数组传递给函数f()
另外,请注意main()的正确签名。

09-25 20:23