vscode运行含strcpy()函数出现trace trap报错

操作系统:mac
编译器:vscode
情境:删除给定字符串中的数字字符
程序:见下方⬇️
提问:
1.为何会出现trace trap?
2.如何在仍使用strcpy()的情况下,进行修正?
附加要求(能做到最好):希望回答语言可以偏平实,我是刚学完指针,开始学字符串的大一新生,谢谢您

#include<stdio.h>
#include<string.h>
char *delnum(char *s);
void main()
{
    char string[10];
    printf("input string:\n");
    gets(string);
    puts(delnum(string));
}
char *delnum(char *s)
{
    int i;
    char *temp=s;
    for(i=0;s[i]!='\0';)
    {
        if(s[i]>='0' && s[i]<='9')
        {
            strcpy(s,s+1);
        }
        else  s++;
    }
    return temp;
}

vscode上运行结果:

img


手机编译器mobile C上运行结果:

img

(1)void main改成 int main,并在main函数最后 return 0;
(2)第15行 for(i=0;s[i]!='\0';)这里,改成 while(*s != '\0')
修改方法一:

#include<stdio.h>
#include<string.h>
char *delnum(char *s);
int main()
{
    char string[10];
    printf("input string:\n");
    gets(string);
    puts(delnum(string));
    return 0;
}
char *delnum(char *s)
{
    int i;
    char *temp=s;
    while(*s != '\0')
    {
        if(*s>='0' && *s<='9')
        {
            strcpy(s,s+1);
        }
        else  s++;
    }
    return temp;
}


修改方法二:

#include<stdio.h>
#include<string.h>
char *delnum(char *s);
int main()
{
    char string[10];
    printf("input string:\n");
    gets(string);
    puts(delnum(string));
    return 0;
}
char *delnum(char *s)
{
    int i=0,j=0;
    
    while(s[i] != '\0')
    {
        if(s[i]>='0' && s[i]<='9')
        {
            ;//do nothing
        }
        else
            s[j++]=s[i];
        i++;
    }
    s[j]=0;
    return s;
}


把主函数void main改成int main就不报错了。.你后面有返回return,

因为你定义的是一个10个字符的数组,所以注意数组越界的问题,输入的时候字符串中字母个数要小于10


#include<stdio.h>

#include<string.h>

char *delnum(char *s);

int main()
{
    char string[10];

    printf("input string:\n");

    gets(string);

    puts(delnum(string));

    return 0;
}

char *delnum(char *s)
{
    int i;
    char *temp=s;
    for(i=0;s[i]!='\0';)
    {
        if(s[i]>='0' && s[i]<='9')
        {
            strcpy(s + i, s + i + 1);
        }
        else i++;
    }

    return temp;
}

运行结果:

img

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
string n;
int main(){
    cin>>n;
    for(int i=0;i<n.size();i++){
        if(n[i]!='0'&&n[i]!='1'&&n[i]!='2'&&n[i]!='3'&&n[i]!='4'&&n[i]!='5'&&n[i]!='6'&&n[i]!='7'&&n[i]!='8'&&n[i]!='9')cout<<n[i];
    }
    return 0;
}