我想写一个程序,删除字符串中的元音。到目前为止这是我的代码:
#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()
的正确签名。