输出1个整数,是字符串中所有正、负整数的和。例题答案都是对的,为啥评测系统说不完全正确呢


#include<stdio.h>
#include<string.h> 
#define M 103
int main()
{
    int i,j,k=0,sum=0,flag;
    char s[M],b[2]={'a'};
    gets(s);
    strcat(s,b);
    for(i=0;s[i];i++){
        if(s[i]>='0'&&s[i]<='9') {
            flag=1;
            if(s[i-1]=='-')    j=-1;
        }
        else flag=0;
        if(flag==1) k=k*10+(s[i]-'0');
        else{
            sum=sum+j*k;
            k=0;
            j=1;    
        }
    }
    printf("%d",sum);
    return 0;
}

14行有问题啊,假如第一个字符就是数字,那s[i-1]就是s[-1]了,越界访问呢